我有一个带键和值对的数组。我动态构建这个数组,下面是代码。
$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,
),
);
谢谢你的进步。
答案 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 )
希望它有所帮助。