2016-10-03 88 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); 
?>