Php 按键排序数组(键是字符串)
我有一个简单的数组。目标是,按键对它们进行排序Php 按键排序数组(键是字符串),php,arrays,sorting,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 '
$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'
预期输出:
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函数是什么?在本例中,您可以使用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);
$someUnsortedArray=array(“140/142”=>“FirstValue”、“118/120”=>“SecondValue”、“122/124”=>“ThirdValue”、“40/42”=>“FourthValue”);
uksort($someUnsortedArray,函数($a,$b){
$a=str_替换('/','$a);
$b=str_替换('/','$b);
返回$a-$b;
});
回声';
打印(someUnsortedArray);
检查php手册:
将ksort()
与SORT\u NUMERIC
标志一起使用
function sortKey($a, $b) {
return strnatcmp($a, $b);
}
uksort($someUnsortedArray,"sortKey");
$someUnsortedArray=array(“140/142”=>“FirstValue”、“118/120”=>“SecondValue”、“122/124”=>“ThirdValue”、“40/42”=>“FourthValue”);
ksort($someUnsortedArray,SORT\u NUMERIC);
回声';
打印(someUnsortedArray);
使用函数
uksort
并向函数传递自定义函数/方法,该函数/方法将根据您的需要进行正确的转换
这是函数uksort
结果是预期的行为,因为如果按字母数字顺序对字符串排序,1*总是在4*之前
如果要按数字排序,则必须拆分字符串,将元素转换为数字并按数字排序
实现取决于您想要实现的目标。只是钥匙的清单?然后,您可以在一个foreach循环中迭代,例如处理键
不会有“开箱即用”的PHP函数。作为替代,您还可以使用自然顺序字符串比较函数来比较键
从理论上讲,这是可行的。。但是,如果不替换“/”而不替换任何内容,有什么解决方案吗?@Tyralcori您需要按自定义方式对其进行排序,因为如果要将它们进行比较,您将无法获得所需的值strings@Tyralcori如果你不想替换它,你至少可以把它炸开,这是我的解决方案。非常感谢。@Tyralcori很高兴这有帮助,顺便说一句,barry的答案很好,你也可以选择那个。排序数值“40/42”或“118/120”不是数值,它们是字符串。我的错,它确实有效。如果你修改你的答案,我将取消我的否决票。(现在不能)旁注:正如你看到的,这个答案是否定的,但是不要再否决这个答案了,因为这已经是正确的了+1.