按键排序数组(键是一个字符串)

时间:2014-10-31 13:10:52

标签: php arrays sorting

我有一个简单的数组。目标是通过密钥对它们进行排序。

$someUnsortedArray = array("140/142" => "FirstValue", "118/120" => "SecondValue", "122/124" => "ThirdValue", "40/42" => "FourthValue");

ksort($someUnsortedArray);

我的输出:

array (size=4)  
  '118/120' => string 'SecondValue' 
  '122/124' => string 'ThirdValue'  
  '140/142' => string 'FirstValue'   
  '40/42' => string 'FourthValue' 

预期输出:

array (size=4)  
'40/42' => string 'FourthValue'  
'118/120' => string 'SecondValue'   
'122/124' => string 'ThirdValue'  
'140/142' => string 'FirstValue' 

我正在搜索的php中的功能是什么?

6 个答案:

答案 0 :(得分:5)

在这种情况下,您可以使用uksort()

$someUnsortedArray = array("140/142" => "FirstValue", "118/120" => "SecondValue", "122/124" => "ThirdValue", "40/42" => "FourthValue");

uksort($someUnsortedArray, function($a, $b){
    $a = str_replace('/', '', $a);
    $b = str_replace('/', '', $b);
    return $a - $b;
});

echo '<pre>';
print_r($someUnsortedArray);

答案 1 :(得分:2)

检查php手册:

http://php.net/manual/en/function.ksort.php

ksort()SORT_NUMERIC标志一起使用。

$someUnsortedArray = array("140/142" => "FirstValue", "118/120" => "SecondValue", "122/124" => "ThirdValue", "40/42" => "FourthValue");
ksort($someUnsortedArray, SORT_NUMERIC);

echo '<pre>';
print_r($someUnsortedArray);

Sample Output

答案 2 :(得分:2)

作为替代方案,您还可以使用自然顺序字符串比较功能来比较键

function sortKey($a, $b) {
    return strnatcmp($a, $b);
}

uksort($someUnsortedArray,"sortKey");

答案 3 :(得分:0)

使用函数uksort并传递函数自定义函数/方法,根据您的需要进行正确的转换。

以下是函数uksort的PHP手册页 http://php.net/manual/en/function.uksort.php

答案 4 :(得分:0)

结果 是预期的行为,因为如果按字母数字顺序排序字符串1 *总是在4 *之前。

如果您希望按编号对其进行排序,则必须拆分字符串,将元素转换为数字并按编号对其进行排序。

实施取决于您想要实现的目标。只是一个键列表?然后你可以在foreach循环中迭代,例如按下键。

没有成为一个开箱即用的&#34;&#34;&#34;开箱即用&#34; PHP函数。

答案 5 :(得分:0)

$someUnsortedArray = array("5/142" => "FirstValue", "118/120" => "SecondValue", "122/124" => "ThirdValue", "40/42" => "FourthValue");

uksort($someUnsortedArray, function($a, $b) {
    // to avoid manipulating them as a string ....      
    return ((float)$a)-((float)$b);
});
var_dump($someUnsortedArray);