我有$ 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'),
);
答案 0 :(得分:1)
您可以使用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
)
)
答案 1 :(得分:1)
$mainArr = array_map( function( $a ){
uksort( $a, function( $b, $c ) use( $a ){
return $a[$b] > $a[$c];
});
return $a;
}, $mainArr );
答案 2 :(得分:0)
StackOverflow上的an answer似乎正是您正在寻找的东西:在PHP中对多维数组进行排序。它需要定义一个自定义比较函数并将它(以及您希望排序的数组)作为参数传递给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提到的)之前,广泛使用google(一项值得学习的技能,特别是在此领域)非常有用。这样,人们就可以提供更有效的反馈和建议。
答案 3 :(得分:0)
您可以使用array_walk()
遍历第一级并通过引用&
来修改子数组,然后在保留原始键的同时调用每个子数组上的asort()
以字母顺序进行排序。
不需要return
,因为所有修改都直接应用于输入变量。
代码:(Demo)
$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',
),
)
答案 4 :(得分:-1)
你可以试试这个,它有点用力,但很容易理解
$resultArr = array();
foreach ( $mainArr as $sortme ) {
asort($sortme);
$resultArr[] = $sortme;
}
答案 5 :(得分:-1)
当然可以。
你可以这样做:
$resultArr = [];
foreach ($mainArr as $m){
asort($m);
$resultArr[] = $m;
}
var_dump($resultArr);
度过愉快的一天。