php*_*00b 11 php arrays max multidimensional-array
我正在尝试为多维数组中的特定键选择最大值.我无法"找到"有问题的钥匙......
所以,数组(比我在这里发布的更长)
[0] => stdClass Object
(
[id] => 70
[cust] => 4
[dnum] => 1
[upper] => Array
(
[0] => 66
)
)
[1] => stdClass Object
(
[id] => 43
[cust] => 42
[dnum] => 2
[upper] => Array
(
[0] => 77
)
)
[2] => stdClass Object
(
[id] => 12
[cust] => 3
[dnum] => 0
[upper] => Array
(
[0] => 99
)
)
Run Code Online (Sandbox Code Playgroud)
我试图在整个数组中找到最大的"dnum"值,所以在这个例子中,$ max = 2.我知道max函数允许我这样做,但我不知道如何引用dnum元素没有将整个东西放在foreach循环中,如果我这样做,那么max将不是使用的函数,对吧?
所以,我不能完全这样做:
$max = max($myarray[]->dnum);
Run Code Online (Sandbox Code Playgroud)
有没有办法让我这样做而不必重新创建整个阵列?
cle*_*tus 22
在PHP 5.2中,唯一的方法是循环遍历数组.
$max = null;
foreach ($arr as $item) {
$max = $max === null ? $item->dnum : max($max, $item->dnum);
}
Run Code Online (Sandbox Code Playgroud)
注意:我已将结果设为0,因为如果所有dnum值都为负,则现在接受的解决方案将产生不正确的结果.你需要用合理的东西播种最大值.
或者你可以使用array_reduce()
:
$max = array_reduce($arr, 'max_dnum', -9999999);
function max_denum($v, $w) {
return max($v, $w->dnum);
}
Run Code Online (Sandbox Code Playgroud)
在PHP 5.3+中,您可以使用匿名函数:
$max = array_reduce($arr, function($v, $w) {
return max($v, $w->dnum);
}, -9999999);
Run Code Online (Sandbox Code Playgroud)
你也可以用array_map()
:
function get_dnum($a) {
return $a->dnum;
}
$max = max(array_map('get_dnum', $arr));
Run Code Online (Sandbox Code Playgroud)
Tyl*_*ter 10
$max = 0;
foreach($array as $obj)
{
if($obj->dnum > $max)
{
$max = $obj->dnum;
}
}
Run Code Online (Sandbox Code Playgroud)
如果您的最高数字不是负数(负数,空数组和0将最大值返回0),该函数将正常工作.
因为您正在使用可以具有自定义属性/结构的对象,所以我不相信您可以使用任何"预定义"函数来获取它.不妨使用foreach循环.
你真的无法摆脱foreach循环,因为即使内部函数使用foreach循环,它也只是在幕后.
另一个解决方案是
$numbers = array();
foreach($array as $obj)
{
$numbers[] = $obj->dnum;
}
$max = max($numbers);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
28334 次 |
最近记录: |