PHP min和max with array,它可靠吗?

时间:2011-02-13 19:21:28

标签: php arrays logic

这样可行但是,它可靠吗?它会一直有效吗,因为MAINarray包含的ANOTHERarray包含2个值,而min应该在MAINarray中工作并在他的子系统中找到最爱的值....

$a[0]=array(0=>522,1=>'Truck');
$a[1]=array(0=>230,1=>'Bear');
$a[2]=array(0=>13,1=>'Feather');
$a[3]=array(0=>40,1=>'Rabit');
$z=min($a);$y=max($a);
echo "The easiest is ".$z[1]." with only ".$z[0]." pounds!<br>";
echo "The haviest is ".$y[1]." with ".$y[0]." pounds!";
你说什么? :)

4 个答案:

答案 0 :(得分:3)

是的,它很可靠。可以安全地假设min(array(1, 2, ..., n))等同于min(1, 2, ..., n)documentation具体涵盖min如何比较多个数组:

// With multiple arrays, min compares from left to right
// so in our example: 2 == 2, but 4 < 5
$val = min(array(2, 4, 8), array(2, 5, 1)); // array(2, 4, 8)

答案 1 :(得分:2)

我对min如何处理您的输入类型的理解是:

  1. 仅考虑项目数量最少的数组。
  2. 比较第一个元素
  3. 如果存在平局,则比较每个数组的下一个元素。重复一步。
  4. e.g:

    array(
      array(1, "A"),
      array(2),        // min
    )
    
    
    array(
      array(1, "A"),  // min
      array(2, "A"),        
    )
    
    array(
      array(1, "Z"),  
      array(1, "A"),  // min
    )
    

    我没有该信息的来源,但这是我记得它的工作方式。

答案 2 :(得分:1)

我不确定这是否一直有效。如有疑问,请自行实施该功能:

function extremes($array, $key=0) {
    if (count($array) === 0) return null;
    $min = $max = null;
    foreach ($array as &$val) {
        if (!isset($val[$key])) continue;
        if ($min > $val[$key]) $min = $val[$key];
        else if ($max < $val[$key]) $max = $val[$key];
    }
    return array($min, $max);
}

$a = array(array(522, 'Truck'), array(230, 'Bear'), array(13, 'Feather'), array(40, 'Rabit'));
list($z, $y) = extremes($a);

答案 3 :(得分:0)

我能找到的唯一证据就是能够使用数组阵列来比较这个错误报告来改进php文档。 http://bugs.php.net/bug.php?id=50607

虽然,他们不太可能删除此功能,因为它必须通过递归方式比较数组。正常使用函数时,参数列表本身就是一个数组,因为没有有限数量的参数。