我有一个存储在变量$ data中的数组。该数组在第一行中具有名称,在第二行中具有值。数组非常大,所以我需要一种方法从它获取五个最高值和这些值的名称。例如,我有这个数组:
[0]=>
array(1447) {
[1]=>
array(3) {
[0]=>
string(11) "Cris"
[2]=>
string(1) "11"
}
[2]=>
array(3) {
[0]=>
string(7) "Alan"
[2]=>
string(1) "28"
}
[3]=>
array(3) {
[0]=>
string(6) "Alex"
[2]=>
string(1) "50"
}
[4]=>
array(3) {
[0]=>
string(6) "Zone"
[1]=>
string(1) "22"
}
[5]=>
array(3) {
[0]=>
string(6) "Ana"
[2]=>
string(1) "1"
}
[6]=>
array(3) {
[0]=>
string(6) "Fisca"
[1]=>
string(1) "5"
}
在这种情况下,我应该显示:Alex 50,Alan 28,Zone 22,Cris 11和Fisca 5.我试图找到一个解决方案,但我不知道如何制作数组值的顶部。你能帮我吗?提前谢谢。
答案 0 :(得分:0)
首先对数组进行排序,然后对前5位进行排序:
usort($data, function ($a, $b) {
return $b[1] - $a[1];
}); //Sort your array
$resultant = array_slice($data,0,5); //Pick top 5
注意:如果用于比较的索引不同,请将return语句更改为:
return (isset($b[1])?$b[1]:$b[2]) - (isset($a[1])?$a[1]:$a[2]);
示例强>:
<?php
$data = [
['Cris', 11],
['Alan', 28],
['Alex', 50],
['Zone', 22],
['Ana', 1]
];
usort($data, function ($a, $b) {
return $b[1] - $a[1];
});
print_r(array_slice($data,0,5));
<强>结果强>:
Array
(
[0] => Array
(
[0] => Alex
[1] => 50
)
[1] => Array
(
[0] => Alan
[1] => 28
)
[2] => Array
(
[0] => Zone
[1] => 22
)
[3] => Array
(
[0] => Cris
[1] => 11
)
[4] => Array
(
[0] => Ana
[1] => 1
)
)
答案 1 :(得分:0)
您可以使用它来获取数组的5个最高值:
<?php
function compare($a, $b) {
if ($a[1] == $b[1]) {
return 0;
}
return ($a[1] > $b[1]) ? -1 : 1;
}
usort($theBigArray, "compare");
$fiveHighestValues = array_slice($theBigArray, 0, 5);
?>
($theBigArray
是你的阵列)
然后,您可以遍历$fiveHighestValues
var以显示所需的五个元素,例如:
<?php
foreach($fiveHighestValues as $value) {
echo $value[0] .' has the value '. $value[1];
// output: Alex has the value 50
}
?>
答案 2 :(得分:0)
我首先要像这样排序数组
function mySort($a, $b) {
return $b[1] - $a[1];
}
usort($arr, 'mySort');
然后你可以弹出前5个值 - 它们是最高的。 你已经写过'数组在第一行有名字而在第二行有一个值。'但我可以看到,对于'Zone',索引'1'设置为'2',所以在你的排序函数中你可能需要添加一些简单的检查,可能是这样的:
function mySortWithCheck($a, $b) {
if (isset($b[1])) {
$valB = $b[1];
} else {
$valB = $b[2];
}
if (isset($a[1])) {
$valA = $a[1];
} else {
$valA = $a[2];
}
return $valB - $valA;
}
答案 3 :(得分:0)
<?php
$data = array(
array("Cris", "11"),
array("Alan", "28"),
array("Alex","50"),
array("Zone","22"),
array("Ana","1")
);
var_dump($data);
function custom_array_sort($a, $b) {
return $b[1] - $a[1];
}
usort($data,'custom_array_sort');
$sorted = array_slice($data,0,5);
var_dump($sorted);
?>