2015-11-05 137 views
0

我正在開發一個自定義PHP項目,我需要獲取多維數組的子集。在不影響密鑰的情況下過濾多維數組

我有一個數組

 
Array 
(
    [0] => Array 
     (
      [0] => 2011 
      [1] => Allegany 
      [2] => 55.4 
     ) 

    [1] => Array 
     (
      [0] => 2012 
      [1] => Albany 
      [2] => 325.1 
     ) 

    [2] => Array 
     (
      [0] => 2011 
      [1] => Bronx 
      [2] => 11 
     ) 
    [3] => Array 
     (
      [0] => 2012 
      [1] => Bronx 
      [2] => 11 
     ) 
) 

欲返回一個陣列,其中[0] => 2012存在,像下面

 
Array 
(


    [1] => Array 
     (
      [0] => 2012 
      [1] => Albany 
      [2] => 325.1 
     ) 


    [3] => Array 
     (
      [0] => 2012 
      [1] => Bronx 
      [2] => 11 
     ) 
) 
+0

好吧,那麼你需要檢查數組中的所有項目尋找匹配並檢查你是否有一個關鍵爲0和值爲2012的子項。這是什麼交易? – Amarnasan

回答

2

array_filter()功能被寫入允許您根據可定製的標準從陣列中選擇一個子集條目

$subset = array_filter(
    $originalArray, 
    function($value) { 
     return isset($value[0]) && $value[0] == 2012; 
    } 
); 

或更通用的變種:

$searchColumn = 0; 
$searchValue = 2012; 

$subset = array_filter(
    $originalArray, 
    function($value) use ($searchColumn, $searchValue) { 
     return isset($value[$searchColumn]) && $value[$searchColumn] == $searchValue; 
    } 
); 

編輯

變,以簡化在不同的列

$searchCriteria = [0 => 2012, 2 => 11]; 

$subset = array_filter(
    $originalArray, 
    function($value) use ($searchCriteria) { 
     return count($searchCriteria) == count(array_intersect_assoc($value, $searchCriteria)); 
    } 
); 
+0

巨大的答案:)順便說一句,以防萬一,沒有使用任何函數的邏輯:'foreach($ arr as $ key => $ v)if($ v [0] == 2012)$ out [$ key] = $ v;' – someOne

+0

非常感謝。這是完美的。但是,如果我必須過濾兩個元素,如「[0] => 2012和[2] => 11」 – Amrit

+0

然後,您可以修改回調函數的邏輯'return isset($ value [0])&& $ value [ 0] == 2012 && isset($ value [2])&& $ value [2] == 11; ' –

相關問題