如何从数组行中获取最小值
Posted
技术标签:
【中文标题】如何从数组行中获取最小值【英文标题】:How to get the minimum value from array row 【发布时间】:2013-10-13 20:42:14 【问题描述】:我试图从列名中包含“xx”的任何列中获取最小值。
下面是我的代码:
<?php
$array = array(
array(
'id' => 1,
'10xx' => 14,
'11xx' => 32,
'12xx' => 4
),
array(
'id' => 2,
'10xx' => 13,
'11xx' => 36,
'12xx' => 41
)
);
foreach($array as $item)
$lowestKey = '';
foreach($item as $key => $value)
if(strpos($key, 'xx') === 0)
if($lowestKey == '')
$lowestKey = $key;
else
if($value < $item[$lowestKey])
$lowestKey = $key;
echo 'lowest for id ' . $item['id'] . ': ' . $item[$lowestKey] . "\n";
?>
【问题讨论】:
“但我不能” - 为什么?相反,输出是什么?另外,看看php.net/manual/en/array.sorting.php php.net/manual/en/function.min.php 【参考方案1】:你已经有了它的功能:
http://php.net/manual/en/function.min.php
echo min(2, 3, 1, 6, 7); // 1
echo min(array(2, 4, 5)); // 2
echo min(0, 'hello'); // 0
echo min('hello', 0); // hello
echo min('hello', -1); // -1
如果这更符合您的需求,请将其与 array_values 结合起来。
【讨论】:
【参考方案2】:只需使用 min() 函数,而不是再次在内部循环。
$lowest_keys = array();
foreach($array as $item)
unset( $item[ 'id' ] );
$lowest_keys[] = min( $item );
【讨论】:
您忘记了id
也在数组中,它导致最低键【参考方案3】:
function find_lowest($array)
$new_array = array();
foreach($array as $key => $val )
if(is_array($val))
$new_array[$key] = find_lowest($val);
else
$new_array[$key] = $val ;
return min($new_array);
$array = array( array( 'id' => 1,
'10xx' => 14,
'11xx' => 32,
'12xx' => 4
),
array(
'id' => 2,
'10xx' => 13,
'11xx' => 36,
'12xx' => 41
)
);
echo find_lowest($array);
【讨论】:
【参考方案4】:function _getNumber($array)
return $array['id'];
$numbers = array_map('_getNumber', $array);
或
$numbers = array_map(function($array)
return $array['id'];
, $array);
echo $min = min($numbers);
echo $max = max($numbers);
【讨论】:
【参考方案5】:$array = array(
array(
'id' => 14,
'10xx' => 14,
'11xx' => 32,
'12xx' => 4
),
array(
'id' => 2,
'10xx' => 13,
'11xx' => 36,
'12xx' => 41
)
);
$lowestKey = '';
foreach($array as $arra)
foreach ($arra as $key=>$value)
if ($key == 'id')
if(($value < $lowestKey )||( $lowestKey== ''))
$lowestKey = $value;
echo $lowestKey;
【讨论】:
【参考方案6】:-
使用
foreach()
循环或array_walk()
迭代每一行/子数组。
使用array_shift()
提取并显示id
(第一个元素)值。
对各个子数组中的剩余值调用min()
以确定最小值。
没有条件表达式。没有不必要的变量。干净、简洁、有效。
代码:(Demo)
$array = [
['id' => 1, '10xx' => 14, '11xx' => 32, '12xx' => 4],
['id' => 2, '10xx' => 13, '11xx' => 36, '12xx' => 41]
];
array_walk($array, function($row)
echo array_shift($row) , " : " , min($row) , "\n";
);
输出:
1 : 4
2 : 13
【讨论】:
以上是关于如何从数组行中获取最小值的主要内容,如果未能解决你的问题,请参考以下文章