将多维数组拆分为数组



所以我有一个表单张贴的结果,看起来像这样:

$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函数,它有效地获取子数组的最后一个元素的值。

事实上,resetend都移动了内部数组指针,这无关紧要。这里唯一重要的是,它们还返回指针所指向的元素的值。

没有循环的解决方案,只是为了好玩:

$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];
}

相关内容

  • 没有找到相关文章

最新更新