PHP中的MAX返回错误的值

时间:2017-03-04 19:16:13

标签: php

我有一个带键和值对的数组。我动态构建这个数组,下面是代码。

$x[] = array('type_name' => $value->name,
            'percentage'=> intval($percentage));

我的目的是获得最大价值,并为此做到

max($x);

然而它返回的错误值实际上是最低值。以下是我的阵列。任何帮助都是极好的。

$x = array(
array( 
    'type_name' => 'type 1'
    'percentage' => 10,

),
array(
    'type_name' => 'type 2'
    'percentage' => 15,

),
array(
    'type_name' => 'type 3'
    'percentage' => 45,
),
);

谢谢你的进步。

3 个答案:

答案 0 :(得分:2)

您正在创建一个数组数组。 max不知道您的数组应该通过'percentage'键进行比较,因此无法在此处使用。

相反,请自行查找最大值。例如,像这样:

$maxPercentage = false;
foreach ($x as $item) {
  if ($maxPercentage === false || $item['percentage'] > $maxPercentage) {
    $maxPercentage = $item['percentage'];
  }
}

现在,$maxPercentage将存储最大百分比。当然,如果你想要一个具有最大百分比的项目,那就这样:

$maxPercentage = false;
$maxItem = false;
foreach ($x as $item) {
  if ($maxPercentage === false || $item['percentage'] > $maxPercentage) {
    $maxPercentage = $item['percentage'];
    $maxItem = $item;
  }
}

答案 1 :(得分:2)

您需要了解max如何与不同类型的数据进行比较。在您的情况下,您试图与其中一个项目中的一个数组项目percentage进行比较,因此函数max不知道这样做。

Revo在manual中有一个示例,向您展示如何执行此操作。

答案 2 :(得分:2)

来自php max() documentation

  

//从左到右比较多个相同长度的数组

这意味着如果你想比较"百分比"值首先而不是" type_name"值,您必须更改数组中的顺序。

所以,你可以像这样构建你的数组("百分比"首先出现)并且应该可以工作:

$x[] = array(
    'percentage'=> intval($percentage),
    'type_name' => $value->name
); 

例如:

$x = array(
    array( 
        'percentage' => 10,
        'type_name' => 'type 1'
    ),
    array(
        'percentage' => 15,
        'type_name' => 'type 2'
    ),
    array(
        'percentage' => 45,
        'type_name' => 'type 3'
    ),
    array(
        'percentage' => 25,
        'type_name' => 'type 4'
    )
);

print_r(max($x));

输出:

Array
(
    [percentage] => 45
    [type_name] => type 3
)

希望它有所帮助。