PHP-多维数组(保持索引数组)

时间:2018-06-26 02:19:30

标签: php arrays

我有这样的数组:

array:2 [▼
  0 => array:3 [▼
     0 => array:1 [▼
        "2018-06-13" => "hadir"
       ]
     1 => array:1 [▼
        "2018-06-12" => "hadir"
       ]
     2 => array:1 [▼
        "2018-06-11" => "alfa"
       ]
  ]
  1 => array:3 [▼
     0 => array:1 [▼
        "2018-06-13" => "hadir"
       ]
     1 => array:1 [▼
        "2018-06-12" => "hadir"
       ]
     2 => array:1 [▼
        "2018-06-11" => "hadir"
       ]
  ]
]

但是我想将此数组转换为:

array:2 [▼
  0 => array:3 [▼
       "2018-06-13" => "hadir"

       "2018-06-12" => "hadir"

       "2018-06-11" => "alfa"

  ]
  1 => array:3 [▼
      "2018-06-13" => "hadir"

      "2018-06-12" => "hadir"

      "2018-06-11" => "hadir"
  ]
]

我尝试使用array_mergearray_walk_recursiveRecursiveIteratorIteratorRecursiveArrayIterator之类的东西来解决自己的问题。但是在我的实践中,它不起作用。

救救我

2 个答案:

答案 0 :(得分:0)

硬部分正在重新创建原始数组:)

通过计数器遍历顶层数组 该数组的每个元素都是一个索引数组。用计数器循环遍历每个htem。 这些元素中的每一个都是一个关联数组,其中包含要用作新数组中的键/值的数据。弹出false中的每个元素并构建新的数组,顶层将在foreach上进行索引,并且每个元素都包含关联数组。

$i

答案 1 :(得分:0)

这里有两种使用splat运算符(...)的简洁/直接方法。两者通过合并各个子阵列有效地“将最深的子阵列上移了”。

代码:(Demo)*根据风格偏好使用一种方法或另一种方法

$array = [
    [
        ['2018-06-13' => "hadir"],
        ['2018-06-12' => "hadir"],
        ['2018-06-11' => "alfa"]
    ],
    [
        ['2018-06-13' => "hadir"],
        ['2018-06-12' => "hadir"],
        ['2018-06-11' => "hadir"]
    ]
];

var_export(
    array_reduce(
        $array,
        function ($carry, $item) {
            $carry[] = array_merge(...$item);
            return $carry;
        },
        []
    )
);

echo "\n---\n";

foreach ($array as &$sub1) {  // modify by reference
    $sub1 = array_merge(...$sub1);
}
var_export($array);

输出:

array (
  0 => 
  array (
    '2018-06-13' => 'hadir',
    '2018-06-12' => 'hadir',
    '2018-06-11' => 'alfa',
  ),
  1 => 
  array (
    '2018-06-13' => 'hadir',
    '2018-06-12' => 'hadir',
    '2018-06-11' => 'hadir',
  ),
)
---
array (
  0 => 
  array (
    '2018-06-13' => 'hadir',
    '2018-06-12' => 'hadir',
    '2018-06-11' => 'alfa',
  ),
  1 => 
  array (
    '2018-06-13' => 'hadir',
    '2018-06-12' => 'hadir',
    '2018-06-11' => 'hadir',
  ),
)