首页 / PHP / 在PHP中创建具有不确定深度的多维数组
在PHP中创建具有不确定深度的多维数组
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在PHP中创建具有不确定深度的多维数组,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2890字,纯文字阅读大概需要5分钟。
内容图文
![在PHP中创建具有不确定深度的多维数组](/upload/InfoBanner/zyjiaocheng/774/e52ecca851a24863a1d2c68d0a07ba5a.jpg)
晚上好 – 我正在尝试根据存储在数据库中的帐户代码的分解文本字符串创建一个多维数组.帐户代码将具有不同的长度/深度.比如说下面数组中的$test类似于我从数据库中提取的结果:
$test = array(
'110|5100|120' => 'Teacher Salaries',
'110|5100|130' => 'Other Professoinal Services',
'110|5100|510|1' => 'Primary Supplies',
'110|5100|510|2' => 'Intermediate Supplies',
'110|7300|110' => 'Administrator Salaries',
'110|7300|510' => 'Administrative Supplies',
'763|5100' => 'Academic Grants'
);
foreach($test AS $k => $v) {
$lvl = explode("|", $k);
// Not sure what to do next...
}
我想要做的是创建一个函数,它将返回一个如下所示的数组:
[110] => Array
(
[5100] => Array
(
[120] => Teacher Salaries
[130] => Other Professional Services
[510] => Array
(
[1] => Primary Supplies
[2] => Intermediate Supplies
)
)
[7300] => Array
(
[110] => Administrator Salaries
[510] => Supplies
)
)
[763] => Array
(
[5100] => Academic Grants
)
我能够提出一个函数,它可以将一个代码中的一个代码正确地分解成一个数组,但是当我尝试将它们合并在一起时,它们会丢失它们的密钥.这是我到目前为止:
function expandedArray($codes, $value) {
$decoded = explode("|",$codes);
RETURN expandedArraySub($decoded, $value);
}
function expandedArraySub($decoded = array(), $value = Null) {
$k = array_pop($decoded);
$out[$k] = $value;
if(is_array($decoded) && count($decoded) > 0) { $out = expandedArraySub($decoded, $out); }
RETURN $out;
}
但是,当我运行以下内容时,我得到一个丢失“110”键的数组,而不是如上所述得到我想要的内容:
$r1 = expandedArray('110|5100|510|1', "Primary Supplies");
// $r1 is now [ 110 => [5100 => [510 => [ 1 ] ] ] ]
$r2 = expandedArray('110|5100|510|2', 'Intermediate Supplies');
// $r2 is now [ 110 => [5100 => [510 => [ 2 ] ] ] ]
$r = array_merge($r1, $r2);
我得到的结果删除了第一个键,并没有像我希望的那样结合结果.这是我得到的:
[0] => Array
(
[5100] => Array
(
[510] => Array
(
[1] => Primary Supplies
)
)
)
[1] => Array
(
[5100] => Array
(
[510] => Array
(
[2] => Intermediate Supplies
)
)
)
任何帮助深表感谢!谢谢!
解决方法:
试试这段代码:
function getVal($data,$chain){
$level = $data;
for($i=0;$i<count($chain);$i++){
if(isset($level[$chain[$i]]))
$level = $level[$chain[$i]];
else
return null; // key does not exist, return null
}
return $level;
}
function setVal(&$data,$chain,$value){
$level = &$data;
for($i=0;$i<count($chain);$i++){
$level = &$level[$chain[$i]]; // set reference (&) in order to change the value of the object
}
$level = $value;
}
设置使用方式如下:
$output = array();
$test = array(
'110|5100|120' => 'Teacher Salaries',
'110|5100|130' => 'Other Professoinal Services',
'110|5100|510|1' => 'Primary Supplies',
'110|5100|510|2' => 'Intermediate Supplies',
'110|7300|110' => 'Administrator Salaries',
'110|7300|510' => 'Administrative Supplies',
'763|5100' => 'Academic Grants'
);
foreach($test AS $k => $v) {
$lvl = explode("|", $k);
setVal($output,$lvl,$v);
}
$output应该具有所需的格式.
在my previous post中阅读有关此代码的更多信息
内容总结
以上是互联网集市为您收集整理的在PHP中创建具有不确定深度的多维数组全部内容,希望文章能够帮你解决在PHP中创建具有不确定深度的多维数组所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。