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.