Например, у меня есть массив, как показано ниже:
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
)
Какой самый простой и оптимальный способ сделать это?
Благодарю вас!
$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);
Выходной массив ([a] => 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);
выходной массив ([a] => 2 [b] => 0 [c] => 3 [d] => 3)
$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 твой друг …
$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);