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

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了在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<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(&amp;$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',$k);
    setVal($output,$lvl,$v); 
}

$output应该具有所需的格式.

my previous post中阅读有关此代码的更多信息

脚本宝典总结

以上是脚本宝典为你收集整理的在PHP中创建具有不确定深度的多维数组全部内容,希望文章能够帮你解决在PHP中创建具有不确定深度的多维数组所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。