我有$mainArr数组,我希望结果为$resultArr。
$mainArr = array(
0 => array(125 => 'B', 127 => 'A', 178 => 'Z', 78 => 'G'),
1 => array(111 => 'X', 127 => 'K', 108 => 'J', 708 => 'P'),
2 => array(125 => 'L', 127 => 'M', 178 => 'Q', 78 => 'A'),
);
我想要的结果如下:
$resultArr = array(
0 => array(127 => 'A', 125 => 'B', 78 => 'G', 178 => 'Z', ),
1 => array(108 => 'J', 127 => 'K', 708 => 'P', 111 => 'X',),
2 => array(78 => 'A', 125 => 'L', 127 => 'M', 178 => 'Q'),
);
您可以使用array_map函数对多维数组进行排序。
要对上面的数组进行排序,你可以使用这样的东西,
function sortArr($a) {
natsort($a);
return $a;
}
$mainArr = array(0 => array(125 => 'B', 127 => 'A', 178 => 'Z', 78 => 'G'),
1 => array(111 => 'X', 127 => 'K', 108 => 'J', 708 => 'P'),
2 => array(125 => 'L', 127 => 'M', 178 => 'Q', 78 => 'A'),
);
$sortedArr = array_map( "sortArr", $mainArr);
它将给出低于输出的
Array
(
[0] => Array
(
[127] => A
[125] => B
[78] => G
[178] => Z
)
[1] => Array
(
[108] => J
[127] => K
[708] => P
[111] => X
)
[2] => Array
(
[78] => A
[125] => L
[127] => M
[178] => Q
)
)
$mainArr = array_map( function( $a ){
uksort( $a, function( $b, $c ) use( $a ){
return $a[$b] > $a[$c];
});
return $a;
}, $mainArr );
你可以试试这个,它有点复杂,但很容易理解
$resultArr = array();
foreach ( $mainArr as $sortme ) {
asort($sortme);
$resultArr[] = $sortme;
}
这里有一个关于StackOverflow的答案,它似乎正是您想要的:在PHP中对多维数组进行排序。它需要定义一个自定义比较函数,并将其(以及要排序的数组)作为参数传递给uasort,uasort维护键值对之间的关联。注意:由于你想对每一行进行排序,你可能会对每一行都进行排序,如下所示:
function cmp($a, $b) {
return strcmp($a, $b); // also look into strnatcmp()
function sortArray($mainArr) {
$resultArr = array();
foreach (array $arr in $mainArr)
$resultArr[] = uasort($arr, 'cmp'); // append the new row to $resultArr
return $resultArr;
}
为了将来的参考,在问你的问题(正如Burak所提到的)之前,广泛地搜索一下是有用的(这是一项值得学习的技能,尤其是在这个领域)。这样,人们可以提供更有效的反馈和建议。
您可以使用array_walk()
遍历第一级,并通过引用&
修改子数组,然后在每个子数组上调用asort()
按字母顺序排序,同时保留原始键。
不需要return
,因为所有修改都直接应用于输入变量。
代码:(演示)
$mainArr = [
[125 => 'B', 127 => 'A', 178 => 'Z', 78 => 'G'],
[111 => 'X', 127 => 'K', 108 => 'J', 708 => 'P'],
[125 => 'L', 127 => 'M', 178 => 'Q', 78 => 'A'],
];
array_walk($mainArr, function(&$subarray) {
asort($subarray);
});
var_export($mainArr);
或者使用PHP7.4的箭头函数语法的更简洁的等效技术(神奇的=>
提供的返回值被array_walk()
默默忽略):(Demo)
array_walk($mainArr, fn(&$subarray) => asort($subarray));
输出:
array (
0 =>
array (
127 => 'A',
125 => 'B',
78 => 'G',
178 => 'Z',
),
1 =>
array (
108 => 'J',
127 => 'K',
708 => 'P',
111 => 'X',
),
2 =>
array (
78 => 'A',
125 => 'L',
127 => 'M',
178 => 'Q',
),
)
当然可以。
你可以这样做:
$resultArr = [];
foreach ($mainArr as $m){
asort($m);
$resultArr[] = $m;
}
var_dump($resultArr);
祝你今天愉快。