Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从数组中获取项目的有效且优雅的方法_Php_Arrays_Array Map - Fatal编程技术网

Php 从数组中获取项目的有效且优雅的方法

Php 从数组中获取项目的有效且优雅的方法,php,arrays,array-map,Php,Arrays,Array Map,例如,我有这样一个数组: $a = array( 0 => array( 'foo' => 42 ), 1 => array( 'foo' => 143 ), 2 => array( 'foo' => 4 ) ); 我需要得到一个最大值为'foo'的元素。目前的代码是: $foos = array_map(function($v) { return $v[

例如,我有这样一个数组:

$a = array(
    0 => array(
        'foo' => 42
    ),
    1 => array(
        'foo' => 143
    ),
    2 => array(
        'foo' => 4
    )
);
我需要得到一个最大值为'foo'的元素。目前的代码是:

$foos = array_map(function($v) {
    return $v['foo'];
}, $a);
$keys = array_keys($foos, max($foos));
$winner = $a[$keys[0]];
print_r($winner);
这是一件可怕的事情。

最优雅吗

$maxValue = max($a);

即使在多维环境下也能工作:

<?php
$a = array(
    0 => array(
        'foo' => 42
    ),
    1 => array(
        'foo' => 143
    ),
    2 => array(
        'foo' => 4
    )
);

$maxValue = max($a);
print_r($maxValue["foo"]);
echo $maxValue["foo"];
您可以尝试:

$input  = array(
  array('foo' => 42),
  array('foo' => 143),
  array('foo' => 4),
);

$output = array_reduce($input, function($a, $b) {
  return $a['foo'] > $b['foo'] ? $a : $b;
});
输出:

array (size=1)
  'foo' => int 143

只需自己运行
foreach
。易读易懂

$highest_foo = PHP_INT_MIN;
$result = null;
foreach ($a as $key=>$foo) {
    if ($foo['foo'] > $highest_foo) {
       $result = $a[$key];
       $highest_foo = $foo['foo'];
    }
}
print_r($result);

OP可能需要具有最大值的项的索引。-1,因为它不能处理多维数组,但PHP文档中的一些示例提供了解决方法,所以它不能工作?也许你应该自己测试一下。。。在答案中添加了一些代码。很抱歉,这可能是CodeViper的php设置错误。是的,这就是问题所在。CodeViper出于某种原因使用PHP5.5!。另外,我从来没有否决过你。再次使用PHP3.10进行测试,它可以工作()+1我会自己为每个人做一个
。更具可读性。是的,我绝对同意使用简单的
foreach
。怀疑你的数组会有数百万行长这让人困惑。你找的不是“赢家”(1、2或3),而是高分。请注意,如果在子项中存储另一项,则基于
max()
的解决方案将中断,因为。这让我想知道为什么你只有这个“foo”键(那么拥有多维数组就没有意义了)
$array = array(
    0 => array(
        'foo' => 42
    ),
    1 => array(
        'foo' => 143
    ),
    2 => array(
        'foo' => 4
    )
);

$maxs = array_keys($array, max($array));

print_r(max($array));//Highest value
print_r($maxs);//Key of hishest value