2016-10-03 83 views
2

我有2个数组,我正在使用。 第一个数组来自CSV文件的数据,另一个来自API的响应。PHP - 与另一个阵列过滤阵列

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

阵列1实施例

Array 
(

[0] => Array 
    (
     [0] => B00CEEZ57S 

    ) 

[1] => Array 
    (
     [0] => B002QJZADK 

    ) 

[2] => Array 
    (
     [0] => B001EHL2UK 

    ) 

[3] => Array 
    (
     [0] => B003FSTNB6 

    ) 

) 

阵列2实施例

Array 
(
    [0] => Array 
    (
     [name] => Jonathan Franzen: Purity (Hardcover); 2015 Edition 
     [ASIN] => B01FMW0CJ4 
    ) 

[1] => Array 
    (
     [name] => Cardinal Gates Outdoor Child Safety Gate, Brown 
     [ASIN] => B00CE8C7SO 
    ) 

[2] => Array 
    (
     [name] => Sauder Edge Water 71.88" Bookcase Estate Black Finish 
     [ASIN] => B00YAT9UGC 
    ) 

[3] => Array 
    (
     [name] => The Pioneer Woman 82695.03R Cowboy Rustic 8" Rosewood Handle Can Opener, Scis... 
     [ASIN] => B015LU7GPU 
    ) 
+0

我认为这将是非常容易的,如果你将从原来的创建两个新阵列:) –

+0

输出数组应该是什么样子? –

回答

1

假定两个阵列分别$array1$array2,下面的步骤需要遵循:

  1. 转换$array1到一维数组$options becau通过这种方式来检查数值会更容易。
  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); 
    }); 
    
+0

谢谢,这工作完美 – mattchambers

2

值匹配请尝试这一个。

<?php 
$arr = Array 
(
    Array(
     "name" => "Jonathan Franzen: Purity (Hardcover); 2015 Edition", 
     "ASIN" => "B002QJZADK" 
    ), 
    Array(
     "name" => "Cardinal Gates Outdoor Child Safety Gate, Brown", 
     "ASIN" => "B00CE8C7SO" 
    ), 
    Array(
     "name" => "Sauder Edge Water 71.88' Bookcase Estate Black Finish", 
     "ASIN" => "B001EHL2UK" 
    ) 
); 

$arr2 = Array(
    Array("B00CEEZ57S"), 
    Array("B002QJZADK"), 
    Array("B001EHL2UK") 
); 

$arr2Make = array(); 
foreach ($arr2 as $key => $a) { 
    if (isset($a[0])) { 
     $arr2Make[] = $a[0]; 
    } 
} 


$arrMake = array_filter($arr,function($a){ 
    global $arr2Make; 
    if (in_array($a["ASIN"], $arr2Make)) { 
     return $a; 
    } 
}); 


print_r($arrMake); 
?>