2016-10-03 2 views
2

У меня есть 2 массива, с которыми я работаю. Первый массив поступает из данных CSV-файла, а другой - от API.PHP - фильтр-массив с другим массивом

Можно ли фильтровать массив 2, используя соответствующие значения из массива 1?

Массив 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 se легче проверить значения таким образом.
  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); 
?>