带数字键的 PHP array_merge_recursive

标签 php arrays merge key numeric

所以我想从文本文件动态构建一个多维数组,除了数字键把我搞砸了之外,一切都很完美......

文本文件看起来像这样:

a=1
b.c=2
b.d.0.e=3
b.d.0.f=4
b.d.1.e=5
b.d.1.f=6

由于 array_merge_recursive 不适用于数字键,因此输出如下:

array(2) { 
 ["a"]=>  
 string(3) "1" 
 ["b"]=>  
 array(2) { 
  ["c"]=>  
  string(3) "2" 
  ["d"]=>  
  array(4) { 
   [0]=>  
   array(1) { 
    ["e"]=>  
    string(9) "3" 
   } 
   [1]=>  
   array(1) { 
    ["f"]=>  
    string(4) "4" 
   } 
   [2]=>  array(1) { 
    ["e"]=>  
    string(8) "5" 
   } 
   [3]=>  
   array(1) { 
    ["f"]=>  
    string(9) "6" 
 }}}}

是否有任何简单的解决方案可以使输出像...?

array(2) { 
 ["a"]=>  
 string(3) "1" 
 ["b"]=>  
 array(2) {
  ["c"]=>  
  string(3) "2" 
  ["d"]=>  
  array(2) { 
   [0]=>  
   array(2) { 
    ["e"]=>  
    string(9) "3" 
    ["f"]=>  
    string(4) "4"  
   } 
   [1]=>  
   array(3) { 
    ["e"]=>  
    string(9) "5"
    ["f"]=>  
    string(4) "6"
}}}}

谢谢

最佳答案

您可以将每一位分解为其组件,并一次一步地构建数组。

$path = "b.d.0.e";
$val = 3;
$output = array();

$parts = explode(".", $path);

// store a pointer to where we currently are in the array.
$curr =& $output;

// loop through up to the second last $part
for ($i = 0, $l = count($parts); $i < $l - 1; ++$i) {
    $part = $parts[$i];

    // convert numeric strings into integers
    if (is_numeric($part)) {
        $part = (int) $part;
    }

    // if we haven't visited here before, make an array
    if (!isset($curr[$part])) {
        $curr[$part] = array();
    }

    // jump to the next step
    $curr =& $curr[$part];
}

// finally set the value
$curr[$parts[$l - 1]] = $val;

我的输出,使用与您相同的输入:

Array (
    [a] => 1
    [b] => Array (
        [c] => 2
        [d] => Array (
            [0] => Array (
                [e] => 3
                [f] => 4
            )
            [1] => Array (
                [g] => 5
                [h] => 6
            )
        )
    )
)

关于带数字键的 PHP array_merge_recursive,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2049286/

相关文章:

具有相关性的 PHP PDO 搜索引擎

PHP重定向功能

php - PHP while 语句中的 Lambda 和冒号?

arrays - Swift:按项目类型对[Any]数组进行排序

javascript - 在 Javascript 中解构对象 - ngbind - Angular 4+

r - 逐个单元格合并

php - 如何从 MySQL 填充 PHP 3D 数组

java - 如何计算数组中的特定字符 - Java

list - 有效地合并两个列表

sql-server - 需要拆分 SQL Server 数据库以进行存档和报告的方法