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)
假设两个数组分别为$array1和$array2,需要执行以下步骤:
$array1为一维数组$options,因为这样更容易检查值。$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)