这是我的问题: 我需要获得具有属性最大值的数组的四个成员。我已经看过max()函数,但是只有一个成员,我需要四个。例如,我可以有这样的数组:
array(
array(
"1",
"10"
),
array(
"9",
"10"
),
array(
"3",
"10"
),
array(
"4",
"10"
),
array(
"10",
"10"
),
array(
"8",
"10"
),
array(
"7",
"10"
),
array(
"6",
"10"
),
array(
"5",
"10"
),
array(
"9",
"10"
)
)
我需要一个能让我这四个成员的功能:
数组(“10”,“10”),数组(“9”,“10”),数组(“8”,“10”),数组(“7”, “10”)
有人可以帮忙吗?
答案 0 :(得分:1)
按降序排列数组usort() 通过array_slice
选择前四项<?php
$ar = getData();
usort( $ar, function($a,$b) { return -strnatcmp($a[0], $b[0]); });
$result = array_slice($ar, 0, 4);
var_dump($result);
function getData() {
return array(
array("1", "10"),
array("9", "10"),
array("3", "10"),
array("4", "10"),
array("10", "10"),
array("8", "10"),
array("7", "10"),
array("6", "10"),
array("5", "10"),
);
}
打印
array(4) {
[0]=>
array(2) {
[0]=>
string(2) "10"
[1]=>
string(2) "10"
}
[1]=>
array(2) {
[0]=>
string(1) "9"
[1]=>
string(2) "10"
}
[2]=>
array(2) {
[0]=>
string(1) "8"
[1]=>
string(2) "10"
}
[3]=>
array(2) {
[0]=>
string(1) "7"
[1]=>
string(2) "10"
}
}
答案 1 :(得分:0)
或者你可以快速使用一个简单的算法(我认为最简单的算法):
$nbrItems = 0;
$greaters = array();
$lessthan = null;
while ($nbrItems < 4 && count($myArray) >= 4) {
$tmp = reset($myArray);
foreach($myArray as $item) {
if ($item[0] > $tmp[0] && ($item[0] < $lessthan || $lessthan === null)) {
$tmp = $item;
}
}
if ($tmp[0] < $lessthan || $lessthan === null) {
$greaters[] = $tmp;
$nbrItems++;
$lessthan = $tmp[0];
}
}
print_r($greaters);
不使用现有功能并了解我们如何使其发挥作用总是很有趣......:)