如何使用PHP在1 for循环中添加数组1的值到数组2的键?



我也刚刚学习了PHP编程,你们这些论坛里的家伙可以帮我处理下面的问题。有如下3个数据数组,在这3个数组中有不同的数组长度。我正在尝试合并到一个新的数组中。但它没有按预期工作

我的代码

$array1 = [
[
"title" => "Title array1 1",
"type" => "array1"
],
[
"title" => "Title array1 2",
"type" => "array1",
],
[
"title" => "Title array1 3",
"type" => "array1"
]
];
$array2 = [
[
"title" => "Title array2 1",
"type" => "array2",
],
[
"title" => "Title array2 2",
"type" => "array2"
]
];
$array3 = [
[
"title" => "Title array3 1",
"type" => "array3"
]
];
$newArray = [];
for ($i = 0; $i < count($array1); $i++) {
@array_push($newArray, [
'array1' => $array1[$i]['title'],
'array2' => $array2[$i]['title'],
'array3' => $array3[$i]['title']
]);
}
echo "<pre>";
print_r($newArray);
/** Output ==>
Array
(
[0] => Array
(
[array1] => Title array1 1
[array2] => Title array2 1
[array3] => Title array3 1
)
[1] => Array
(
[array1] => Title array1 2
[array2] => Title array2 2
[array3] => 
)
[2] => Array
(
[array1] => Title array1 3
[array2] => 
[array3] => 
)
)
*/

帮助我创建一个像这样的新数组

Array
(
[0] => Array
(
[array1] => Title array1 1
[array2] => Title array2 1
[array3] => Title array3 1
)
[1] => Array
(
[array1] => Title array1 2
[array2] => Title array2 2
[array3] => Title array3 1 // Add here
)
[2] => Array
(
[array1] => Title array1 3
[array2] => Title array2 1 // Add here
[array3] => Title array3 1 // Add here
)
)

我衷心感谢

你就快成功了。您可以使用%操作符从输入数组中获得正确的索引,以便您可以为每个新数组旋转它们的值。

$newArray = [];
for ($i = 0; $i < count($array1); $i++) {
$newArray[] = [
'array1' => $array1[$i]['title'],
'array2' => $array2[$i % count($array2)]['title'],
'array3' => $array3[$i % count($array3)]['title']
];
}

对于较大的数组,应该在循环之前对其他数组进行计数,并将值保存在变量中,以避免重复计算。对于这个小例子,它不会有太大的区别。

附注:

  • 避免使用错误抑制操作符(@)。错误包含有用的信息,你不应该隐藏自己。
  • 你不需要array_push()添加一个项目到数组。您可以像上面所示的那样使用[]

可以将三个数组进行映射,形成一个统一的多维数组。假设第一个数组将始终至少有一行包含title值,如果某个特定列丢失或未声明,您可以回退到该值。

不需要在每次迭代时对count()数组进行运算,也不需要进行模量计算;空合并可以很好地工作。

代码(演示):

var_export(
array_map(
fn(...$rows) => [
'array1' => $rows[0]['title'] ?? $array1[0]['title'],
'array2' => $rows[1]['title'] ?? $array1[0]['title'],
'array3' => $rows[2]['title'] ?? $array1[0]['title'],
],
$array1,
$array2,
$array3
)
);

或不带variadic/spread操作符:(Demo)

var_export(
array_map(
fn($row1, $row2, $row3) => [
'array1' => $row1['title'] ?? $array1[0]['title'],
'array2' => $row2['title'] ?? $array1[0]['title'],
'array3' => $row3['title'] ?? $array1[0]['title'],
],
$array1,
$array2,
$array3
)
);

最新更新