2015-02-05 3 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'? –

ответ

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 [Ь] => 1 [с] => 3 [d] => 3)

Обновление ответа

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

выходной массив ([а] => 2 [Ь] => 0 [с] => 3 [d] => 3)

+0

Это не то, что я имел в виду. Что делать, если массив выглядит следующим образом: «массива $ = массив ( 0 => Массив ( "а"=> "1", "б"=> "0", "с"=>" 1" , "d" => "1" ), 1 => Массив ( "а" => "1", "б" => "5", "с" => «1 », "d"=> "2" ), 4 => Массив ( "а"=> "1", "б"=> "0", "с"=> "1" , "d" => "3" ) ); ' Выход: Array ([a] => 1 [b] => 5 [c] => 1 [d] => 3) Но я хотел бы получать: Array ([a] => 1 [ b] => 0 [c] => 1 [d] => 3) – Gemmi

+0

@gemmi проверить мой ответ на вопрос –

+0

Отлично! Большое спасибо :) – Gemmi

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: Google является вашим другом ...

+0

Я бы принял этот краткий подход к принятому ответу в любой день, независимо от каких-либо предельных показателей производительности. – Drumbeg

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

Ваш результат: Array ([a] => 5 [b] => 1 [c] => 3 [d] => 3), not Массив ([a] => 2 [b] => 0 [c ] => 3 [d] => 3), – Gemmi

Смежные вопросы