通过分块、转置和合并来重组数组数据



我有下面提到的数组,我的值总是 3 的倍数。

$xyz = [
["name" => "abc"],
["name" => "snds"],
["name" => ""),
["number"=> "452"],
["number" => "845120"],
["number" => "84514513200"],
["email" => "ddddf"],
["email" => "dkskns"],
["email" => "kjnksdnkds"]
];

但这不是我执行进一步操作的正确格式,所以我想要下面提到的这个数组。

$abc = [
[
"name" => "abc",
"number" => '452',
"email" => "ddddf"
],
[
"name" => "snds",
"number" => "845120",
"email" => "dkskns"
],
[
"name" => "",
"number" => "84514513200",
"email" => "kjnksdnkds"
]
];

注意:数组长度是动态的,但它始终是 3 的倍

一种可能性是使用模%运算符。

foreach中,该值是一个数组,您可以使用array_keys来获取键并重置以获取第一个数组元素的值。

$result = [];
$count = 0;
foreach ($xyz as $value) {
if ($count%3 === 0) {
$count = 0;
}
$result[$count][array_keys($value)[0]] = reset($value);
$count++;
}

演示

这将为您提供:

array(3) {
[0]=>
array(3) {
["name"]=>
string(3) "abc"
["number"]=>
string(3) "452"
["email"]=>
string(5) "ddddf"
}
[1]=>
array(3) {
["name"]=>
string(4) "snds"
["number"]=>
string(6) "845120"
["email"]=>
string(6) "dkskns"
}
[2]=>
array(3) {
["name"]=>
string(0) ""
["number"]=>
string(11) "84514513200"
["email"]=>
string(10) "kjnksdnkds"
}
}

这将可以:

$result = array_map('array_merge', ...array_chunk($xyz, count($xyz) / 3));

最新更新