所以我有一个表单张贴的结果,看起来像这样:
$data = [
'id_1' => [
'0' => 1,
'1' => 2
],
'id_2' => [
'0' => 3,
'1' => 4
],
'id_3' => [
'0' => 5,
'1' => 6
]
];
我想要实现的是将这个数组分割成两个不同的数组,像这样:
$item_1 = [
'id_1' => 1,
'id_2' => 3,
'id_3' => 5
]
$item_2 = [
'id_1' => 2,
'id_2' => 4,
'id_3' => 6
]
我已经尝试使用所有适当的数组方法,如array_chunk, array_merge与循环,但我似乎不能让我的头脑围绕如何实现这一点。我见过很多类似的帖子,其中第一个键不像我的数组名称(id_1, id_2, id_3)。但是在我的例子中,键的名称是至关重要的,因为它们需要被设置为单个数组中的键的名称。
很难找到比这更短的:
$item1 = array_map('reset', $data);
$item2 = array_map('end', $data);
解释 array_map
期望回调函数作为它的第一个参数。在第一行中,这是reset
,因此reset
将在$data
的每个元素上调用,有效地获取子数组的第一个元素值。array_map
将这些结果合并成一个新的数组,保留原来的键。
第二行做同样的事情,但是使用end
函数,它有效地获取子数组的最后一个元素的值。
事实上,reset
和end
都移动了内部数组指针,这无关紧要。这里唯一重要的是,它们还返回指针所指向的元素的值。
没有循环的解决方案,只是为了好玩:
$result = [[], []];
$keys = array_keys($data);
array_map(function($item) use(&$result, &$keys) {
$key = array_shift($keys);
$result[0][$key] = $item[0];
$result[1][$key] = $item[1];
}, $data);
只要一个普通的foreach
循环就可以了。
$item_1 = [];
$item_2 = [];
foreach ($data as $k => $v){
$item_1[$k] = $v[0];
$item_2[$k] = $v[1];
}