PHP构建多维数组,在PHP中创建具有不确定深度的多维数组

晚上好 – 我正在尝试根据存储在数据库中的帐户代码的分解文本字符串创建一个多维数组.帐户代码将具有不同的长度/深度.比如说下面数组中的$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

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

$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应该具有所需的格式.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值