加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 动态创建多维数组

发布时间:2020-12-13 17:24:28 所属栏目:PHP教程 来源:网络整理
导读:我正在尝试生成一个多维数组,其深度等于正则表达式中找到的匹配数.数组键是每个匹配的字符串值. 例如: preg_match('/([A-Z])-?([0-9])-?([0-9]{1,3})/i','A-1-001',$matches); 返回: Array ( [0] = A-1-001 [1] = A [2] = 1 [3] = 001) 我要转换为: $fo
我正在尝试生成一个多维数组,其深度等于正则表达式中找到的匹配数.数组键是每个匹配的字符串值.

例如:

preg_match('/([A-Z])-?([0-9])-?([0-9]{1,3})/i','A-1-001',$matches);

返回:

Array (
   [0] => A-1-001
   [1] => A
   [2] => 1
   [3] => 001
)

我要转换为:

$foo = array(
    'A' => array(
        '1' => array(
            '001' => array('some','information')
        )
    )
);

这样我就可以将它与另一个多维数组合并,如下所示:

$bar['A']['1']['001'] = array('some','other','information');

该过程需要处理任意数量的匹配/维度.

以下是我目前的做法.我没有理解这个概念,因为这种尝试远远落后于我的目标.

$foo = array();
$j = count($matches);

for ($i = 1; $i < $j; $i++) {
    $foo[ $matches[$i - 1] ] = $matches[$i];
}

/*
  $foo's structure becomes:
  Array (
      [A-1-001] => A
      [A] => 1
      [1] => 001
  )
*/

它只是交换数组键,而不是创建我需要的新子数组.

任何建议或解决方案将不胜感激.谢谢!

解决方法

使用一些PHP-Fu:

$matches = array('A-1-001','A',1,'001');
$info = array('some','information');
print_r(tree($matches,$info));

function tree($array,$info){
    $max = count($array)-1;
    $result = array($array[$max] => $info);
    for($i=$max-1;$i>0;$result = array($array[$i--] => $result));
    return $result;
}

输出:

Array
(
    [A] => Array
        (
            [1] => Array
                (
                    [001] => Array
                        (
                            [0] => some
                            [1] => information
                        )

                )

        )

)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读