在 php 中使用 2 个不同的数组创建一个新数组

问题描述 投票:0回答:4

我有 2 个这样的数组。数组1:

Array
(
    [abu-garcia] => 1
    [daiwa] => 4
    [shimano] => 4
)
Array 2:
Array
(
    [0] => Array
        (
            [brand_id] => 36
            [brand_name] => Abu Garcia
            [brand_slug] => abu-garcia
        )

    [1] => Array
        (
            [brand_id] => 41
            [brand_name] => Daiwa
            [brand_slug] => daiwa
        )

    [2] => Array
        (
            [brand_id] => 41
            [brand_name] => Daiwa
            [brand_slug] => daiwa
        )

    [3] => Array
        (
            [brand_id] => 41
            [brand_name] => Daiwa
            [brand_slug] => daiwa
        )

    [4] => Array
        (
            [brand_id] => 41
            [brand_name] => Daiwa
            [brand_slug] => daiwa
        )

    [5] => Array
        (
            [brand_id] => 39
            [brand_name] => Shimano
            [brand_slug] => shimano
        )

    [6] => Array
        (
            [brand_id] => 39
            [brand_name] => Shimano
            [brand_slug] => shimano
        )

    [7] => Array
        (
            [brand_id] => 39
            [brand_name] => Shimano
            [brand_slug] => shimano
        )

我想创建一个新数组,应如下所示:

    Array
(
    [0] => Array
        (
            [brand_id] => 36
            [brand_name] => Abu Garcia
            [brand_slug] => abu-garcia
            [count] => 1
        )

    [1] => Array
        (
            [brand_id] => 41
            [brand_name] => Daiwa
            [brand_slug] => daiwa
            [count] => 4
        )

    [2] => Array
        (
            [brand_id] => 41
            [brand_name] => Daiwa
            [brand_slug] => daiwa
            [count] => 4
        )

    [3] => Array
        (
            [brand_id] => 41
            [brand_name] => Daiwa
            [brand_slug] => daiwa
            [count] => 4
        )

    [4] => Array
        (
            [brand_id] => 41
            [brand_name] => Daiwa
            [brand_slug] => daiwa
            [count] => 4
        )

    [5] => Array
        (
            [brand_id] => 39
            [brand_name] => Shimano
            [brand_slug] => shimano
            [count] => 4
        )

    [6] => Array
        (
            [brand_id] => 39
            [brand_name] => Shimano
            [brand_slug] => shimano
            [count] => 4
        )

    [7] => Array
        (
            [brand_id] => 39
            [brand_name] => Shimano
            [brand_slug] => shimano
            [count] => 4
        )

这两个数组都是由 wordpress 创建的。 array1 是检查品牌猫中产品数量时函数的输出,其他数组提供品牌详细信息。 谢谢

php arrays wordpress array-merge array-map
4个回答
2
投票

我想我明白你想做什么......

如果这些是您的数组的示例:

$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);

0
投票

您可以用最简单的方式这样做。 假设您的第一个数组名称是 $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);

0
投票

使用

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]`

-1
投票

数组合并 将一个或多个数组的元素合并在一起,以便将其中一个的值附加到前一个数组的末尾。它返回结果数组。

示例 #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);
?>
© www.soinside.com 2019 - 2024. All rights reserved.