我有一个带有
brand_slug
键的计数关联数组和一个二维数组,我想向其中附加相关计数数据。
$countArray = [
"abu-garcia" => 1,
"daiwa" => 4,
"shimano" => 4
];
$dataArray = [
[
"brand_id" => 36,
"brand_name" => "Abu Garcia",
"brand_slug" => "abu-garcia"
],
[
"brand_id" => 41,
"brand_name" => "Daiwa",
"brand_slug" => "daiwa"
],
[
"brand_id" => 41,
"brand_name" => "Daiwa",
"brand_slug" => "daiwa"
],
[
"brand_id" => 39,
"brand_name" => "Shimano",
"brand_slug" => "shimano"
],
[
"brand_id" => 39,
"brand_name" => "Shimano",
"brand_slug" => "shimano"
],
];
我想创建一个新数组,应如下所示:
[
[
"brand_id" => 36,
"brand_name" => "Abu Garcia",
"brand_slug" => "abu-garcia",
"count" => 1
],
[
"brand_id" => 41,
"brand_name" => "Daiwa",
"brand_slug" => "daiwa",
"count" => 4,
],
[
"brand_id" => 41,
"brand_name" => "Daiwa",
"brand_slug" => "daiwa",
"count" => 4
],
[
"brand_id" => 39,
"brand_name" => "Shimano",
"brand_slug" => "shimano",
"count" => 4
],
[
"brand_id" => 39,
"brand_name" => "Shimano",
"brand_slug" => "shimano",
"count" => 4
],
];
我想我明白你想做什么......
如果这些是您的数组的示例:
$CountArray = array("abu-garcia"=>1,
"daiwa"=>4,
"shimano"=>4);
$DataArray = array(
array("brand_id"=>36, "brand_name"=>"Abu Garcia", "brand_slug"=>"abu-garcia"),
array("brand_id"=>41, "brand_name"=>"Daiwa", "brand_slug"=>"daiwa"),
array("brand_id"=>39, "brand_name"=>"Shimano", "brand_slug"=>"shimano")
);
然后循环遍历第二个数组以构建一个新数组,并从第一个数组中添加
count
键,如下所示:
$i = 0;
foreach($DataArray as $ItemArray){
foreach($ItemArray as $Key=>$Value){
$NewArray[$i][$Key] = $Value;
$NewArray[$i]['count'] = 0;
if(isset($CountArray[$ItemArray['brand_slug']])){
$NewArray[$i]['count'] = $CountArray[$ItemArray['brand_slug']];
}
}
ksort($NewArray[$i]);
$i++;
}
print_r($NewArray);
您可以用最简单的方式这样做。 假设您的第一个数组名称是 $first_array,第二个数组名称是 $second_array。
就像循环第二个一样
foreach($second_array as $index => $item)
{
$second_array[$index]['count'] = $first_array[$item['brand_slug']];
}
echo "<pre>";
print_r($second_array);
使用
array_map()
和数组联合运算符 (+
) 可以最优雅地完成基于关联查找/映射数组向二维数组中的所有行添加新列的任务。
代码:(演示)
var_export(
array_map(
fn($row) => $row + ['count' => $countArray[$row['brand_slug']]],
$dataArray
)
);
在经典的
foreach()
循环中使用数组联合赋值运算符 (+=
) 通过引用修改数据数组也没有任何问题。 (演示)
foreach ($dataArray as &$row) {
$row += ['count' => $countArray[$row['brand_slug']]];
}
var_export($dataArray);
作为提问者的示例数据中未提出的考虑因素,如果在映射数组中找不到行的值,请使用空合并运算符回退到默认值。
`['count' => $map[$rowValue] ?? $someDefault]`
数组合并 将一个或多个数组的元素合并在一起,以便将其中一个的值附加到前一个数组的末尾。它返回结果数组。
示例 #array_merge() 示例
<?php
$array1 = array("color" => "red", 2, 4);
$array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4);
$result = array_merge($array1, $array2);
print_r($result);
?>