我有一个简单的数组。目标是通过密钥对它们进行排序。
$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中的功能是什么?
答案 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);
答案 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);