假设我有一个数组
@Html.DropDownListFor(x => x.Task_Status_Code, Model.TaskStatus, new { @class = "form-control", @disabled = "disabled" })
如何通过关键示例(彼得)对多维数组进行排序。我尝试使用
array(8) {
[0] =>
array(1) {
'Peter' =>
int(4)
}
[1] =>
array(1) {
'Piper' =>
int(4)
}
[2] =>
array(1) {
'picked' =>
int(4)
}
[3] =>
array(1) {
'peck' =>
int(4)
}
[4] =>
array(1) {
'pickled' =>
int(4)
}
但是它只是返回一个布尔值
我想要的输出
ksort($arr);
该数组应按键和升序排序。
答案 0 :(得分:1)
用usort排序,请检查demo
usort($array,function($a,$b){
return strcmp(strtolower(key($a)),strtolower(key($b)));
});
答案 1 :(得分:0)
ksort()
方法执行就地排序。因此,尽管它仅返回一个布尔值(如您正确指出的那样),但它会将$arr
中的值按排序顺序进行了突变。请注意,根据您的预期输出,您似乎要进行不区分大小写的搜索。为此,您需要使用SORT_FLAG_CASE
排序标志。因此,您不必使用ksort($arr)
,而不必调用ksort($arr, SORT_FLAG_CASE)
。您可以在sort()
method's documentation中查看ksort()
如何使用排序标志。希望有帮助!
答案 2 :(得分:0)
您可以这样做,
$temp = array_map(function($a){
return key($a); // fetching all the keys
}, $arr);
natcasesort($temp); // sorting values case insensitive
$result = [];
// logic of sorting by other array
foreach($temp as $v){
foreach($arr as $v1){
if($v == key($v1)){
$result[] = $v1;
break;
}
}
}
输出
Array
(
[0] => Array
(
[peck] => 4
)
[1] => Array
(
[Peter] => 4
)
[2] => Array
(
[picked] => 4
)
[3] => Array
(
[pickled] => 4
)
[4] => Array
(
[Piper] => 4
)
)