通过将列值与另一个数组中不同键的列进行比较来过滤二维数组

mat*_*ers 5 php arrays intersection array-intersect

我正在使用 2 个数组。第一个数组来自 CSV 文件的数据,另一个数组是来自 API 的响应。

是否可以使用数组 1 中的匹配值来过滤数组 2?

数组 1 示例

[
    ["B00CEEZ57S"],
    ["B002QJZADK"],
    ["B001EHL2UK"],
    ["B003FSTNB6"],
]
Run Code Online (Sandbox Code Playgroud)

数组 2 示例

[
    [
        "name" => "Jonathan Franzen: Purity (Hardcover); 2015 Edition",
        "ASIN" => "B002QJZADK"
    ],
    [
        "name" => "Cardinal Gates Outdoor Child Safety Gate, Brown",
        "ASIN" => "B00CE8C7SO"
    ],
    [
        "name" => "Sauder Edge Water 71.88\" Bookcase Estate Black Finish",
        "ASIN" => "B001EHL2UK"
    ],
    [
        "name" => "The Pioneer Woman 82695.03R Cowboy Rustic 8\" Rosewood Handle Can Opener, Scis...",
        "ASIN" => "B015LU7GPU"
    ]
]
Run Code Online (Sandbox Code Playgroud)

应保留这些行:

[
    'name' => 'Jonathan Franzen: Purity (Hardcover); 2015 Edition',
    'ASIN' => 'B002QJZADK',
],
[
    'name' => 'Sauder Edge Water 71.88" Bookcase Estate Black Finish',
    'ASIN' => 'B001EHL2UK'
]
Run Code Online (Sandbox Code Playgroud)

Obj*_*tor 9

假设两个数组分别为$array1和$array2,需要执行以下步骤:

  1. 转换$array1为一维数组$options,因为这样更容易检查值。
  2. $array2使用array_filter()进行过滤,使得'ASIN'索引对应的值与包含在$options

    foreach ($array1 as $arr) {
        $options[] = current($arr);  // COnverted to 1-d array
        /* Result:  Array ( [0] => B00CEEZ57S [1] => B002QJZADK [2] => B001EHL2UK [3] => B003FSTNB6 )*/
    }
    
    /* Filter $array2 and obtain those results for which ['ASIN'] value matches with one of the values contained in $options */
    $result = array_filter($array2, function($v) use ($options) {
        return in_array($v['ASIN'], $options);
    });
    
    Run Code Online (Sandbox Code Playgroud)