我有这样的数组:
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_merge
,array_walk_recursive
和RecursiveIteratorIterator
和RecursiveArrayIterator
之类的东西来解决自己的问题。但是在我的实践中,它不起作用。
救救我
答案 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',
),
)