如何排序php数组的字符串索引

时间:2014-03-20 14:59:19

标签: php arrays sorting

我有兴趣按升序排序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列..

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代替。有关可用排序标记的列表,请参阅文档。

Demo

答案 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);
?>