我有兴趣按升序排序php数组索引键,
我有这个数组
(
[462 1 5.300] => 1
[462 9 4.900] => 1
[462 9 4.300] => 1
[462 2 4.800] => 1
[462 6 4.700] => 1
[462 7 4.900] => 1
[462 7 4.700] => 1
[462 8 4.500] => 1
[462 3 4.500] => 1
[462 4 4.700] => 1
[462 3 4.700] => 1
[462 5 4.500] => 1
)
我希望排序
之后的输出是这样的(
[462 1 5.300] => 1
[462 2 4.800] => 1
[462 3 4.500] => 1
[462 3 4.700] => 1
[462 4 4.700] => 1
[462 5 4.500] => 1
[462 6 4.700] => 1
[462 7 4.700] => 1
[462 7 4.900] => 1
[462 8 4.500] => 1
[462 9 4.300] => 1
[462 9 4.900] => 1
)
我想排序前3个索引,它可以用作字符串吗?我在阵列中还有3列,但我在这里只显示了3列..
答案 0 :(得分:3)
正常ksort()
可以解决问题,但如果要按多个顺序执行排序(不同参数值的不同顺序),这将无法正常工作。
您可以使用array_multisort()
实现此目的。首先,您创建三个(或更多,取决于您拥有的参数数量)数组 - 每个数组包含参数值。然后使用相应的排序标志将其传递给array_multisort()
:
$param1 = $param2 = $param3 = array();
foreach ($data as $key => $value) {
$parts = explode(' ', $key);
$param1[] = $parts[0];
$param2[] = $parts[1];
$param3[] = $parts[2];
}
array_multisort($data, $param1, SORT_ASC, $param2, SORT_ASC, $param3, SORT_ASC);
如果您希望按降序执行排序,则可以使用SORT_DESC
代替。有关可用排序标记的列表,请参阅文档。
答案 1 :(得分:2)
函数usort()
将是答案,但您需要按键排序,而不是按值排序。因此,您必须使用uksort()
。
为您提供微小的帮助(未经过测试):
<?php
function cmp($a, $b)
{
$aParts = explode(' ',$a);
$bParts = explode(' ',$b);
if($aParts[0] !== $bParts[0]) {
return ($aParts[0] >= $bParts[0]) ? -1 : 1;
}
if( (int) $aParts[1] !== (int) $bParts[1]) { // compare second parts as integer
return ($aParts[1] >= $bParts[1]) ? -1 : 1;
}
if( (float) $aParts[2] !== (float) $bParts[2]) {
return ($aParts[2] >= $bParts[2]) ? -1 : 1;
}
return 0;
}
$a = array(
[462 1 5.300] => 1
[462 9 4.900] => 1
[462 9 4.300] => 1
[462 2 4.800] => 1
[462 6 4.700] => 1
[462 7 4.900] => 1
[462 7 4.700] => 1
[462 8 4.500] => 1
[462 3 4.500] => 1
[462 4 4.700] => 1
[462 3 4.700] => 1
[462 5 4.500] => 1
);
uksort($a, "cmp");
foreach ($a as $key => $value) {
echo "$key: $value\n";
}
答案 2 :(得分:1)
为了获得您要显示的输出,您可以使用ksort()
功能 - http://www.php.net/manual/fr/function.ksort.php。
<?php
$test = array(
"462 1 5.300" => 1,
"462 9 4.900" => 1,
"462 9 4.300" => 1,
"462 2 4.800" => 1,
"462 6 4.700" => 1,
"462 7 4.900" => 1,
"462 7 4.700" => 1,
"462 8 4.500" => 1,
"462 3 4.500" => 1,
"462 4 4.700" => 1,
"462 3 4.700" => 1,
"462 5 4.500" => 1
);
print_r($test);
ksort($test);
print_r($test);
?>