2015-02-05 115 views
-1

例如,我有陣列象下面這樣:多維數組查詢PHP

Array 
(
    [0] => Array 
    (
     [a] => 1 
     [b] => 0 
     [c] => 1 
     [d] => 1  
    ) 
    [1] => Array 
    (
     [a] => 2 
     [b] => 0 
     [c] => 3 
     [d] => 3 
    ) 
    [4] => Array 
    (
     [a] => 5 
     [b] => 1 
     [c] => 3 
     [d] => 2 
    )  

現在我想只接收具有最大[d]值數組。 因此,在這種情況下:

Array (
     [a] => 2 
     [b] => 0 
     [c] => 3 
     [d] => 3 
    ) 

什麼是最簡單,做最優化的方式? 謝謝!

+0

你嘗試什麼嗎?鑰匙可以嗎? a b d d'應該是'a b c d'? – 2015-02-05 19:10:17

回答

3
$res=array(); 
    foreach ($array as $temp) 
    { 
     foreach ($temp as $k=>$value) 
     { 
      if(!isset($res[$k])) 
      { 
       $res[$k]=$value; 
      } 
      else 
      { 
       $res[$k]=max($value,$res[$k]); 
      } 
     } 
    } 
    print_r($res); 

輸出陣列([α] => 5 [B] => 1 [C] => 3 [d] => 3)

更新應答

$res=array(); 
    $max=0; 
    foreach ($array as $temp) 
    { 
     if($max<$temp['d']) 
     { 
      $max=$temp['d']; 
      $res=$temp; 
     } 
    } 
    print_r($res); 

輸出陣列([α] => 2 [b] => 0 [C] => 3 [d] => 3)

+0

這不是我的意思。 如果陣列看起來像: 「$陣列=陣列 ( 0 =>數組 ( 「一個」=> 「1」, 「B」=> 「0」, 「C」=>「 1" , 「d」=> 「1」 ) 1 =>數組 ( 「一個」=> 「1」, 「b」=> 「5」, 「C」=>「1 」, 「d」=> 「2」 ) 4 =>數組 ( 「一個」=> 「1」, 「b」=> 「0」, 「C」=> 「1」 , 「d」=>「3」 ) );' (Array [(a] => 1 [b] => 5 [c] => 1 [d] => 3) b] => 0 [c] => 1 [d] => 3) – Gemmi 2015-02-05 19:29:36

+0

@gemmi檢查我的更新回答 – 2015-02-05 19:44:57

+0

完美!非常感謝你:) – Gemmi 2015-02-05 19:50:30

1
$array = Array 
(
    [0] => Array 
    (
     [a] => 1 
     [b] => 0 
     [c] => 1 
     [d] => 1  
    ) 
    [1] => Array 
    (
     [a] => 2 
     [b] => 0 
     [c] => 3 
     [d] => 3 
    ) 
    [4] => Array 
    (
     [a] => 5 
     [b] => 1 
     [c] => 3 
     [d] => 2 
    )); 

    uasort ($array, function ($a, $b) { 
      return $a['d'] > $b['d']; 
     } 
    ); 

$valueYouAreSearchingFor = $array[0]; 

我用uasort使用匿名函數對數組進行排序。我不得不測試它是否比ForEach循環更快,但它肯定更有趣(至少如果你問我:))

如果你不想改變原始數組,對副本進行排序。

PS:谷歌是你的朋友?

+0

無論任何邊際績效收益,我都會在任何一天接受的答案中採用這種簡潔的方法。 – Drumbeg 2015-02-05 20:27:54

0
$subArray1 = array('a' => 1, 'b' => 0, 'c' => 1, 'd' => 1); 
$subArray2 = array('a' => 2, 'b' => 0, 'c' => 3, 'd' => 3); 
$subArray3 = array('a' => 5, 'b' => 1, 'c' => 3, 'd' => 2); 
$data = array($subArray1, $subArray2, $subArray3); 

$resultArray = array(); 
/* 
Turn off 'notification' level errors or add 'isset' checks 
*/ 
foreach($data as $subArray) 
{ 
    foreach($subArray as $key => $value) 
    { 
     $resultArray[$key] = max($resultArray[$key], $value); 
    } 
} 
var_dump($resultArray); 
+0

您的結果是陣列([a] => 5 [b] => 1 [c] => 3 [d] => 3), 而不是Array([a] => 2 [b] => 0 [c ] => 3 [d] => 3), – Gemmi 2015-02-05 19:45:48