/开始更新/
如果我定位单个数组数组但不是数组数组数组,则以下解决方案将有效。
这只是关联数组的一部分,每个分组的部分都需要进行排序。请参阅更新的数组。
我已经尝试了以下内容,它似乎没有点击子阵列:
function natorder($a, $b){
return strnatcmp( $a['name'], $b['name'] );
}
usort($array, 'natorder');
/更新结束/
尝试变体usort
,sort
和以下函数:
function sortNames($a, $b){
return $a['name'] - $b['name'];
}
我无法对数组进行排序:
[abc-abc] => Array
(
[0] => Array
(
[name] => abc-abc-34
[qty] => 4
[sub_qty] => 4
[area] => G11
)
[1] => Array
(
[name] => abc-abc-45
[qty] => 145
[sub_qty] => 146
[area] => G11
)
[2] => Array
(
[name] => abc-abc-67
[qty] => 215
[sub_qty] => 100,
116
[area] => T,
G12
)
[3] => Array
(
[name] => abc-abc-56
[qty] => 0
)
)
[def-def] => Array
(
[0] => Array
(
[name] => def-def-34
[qty] => 4
[sub_qty] => 4
[area] => G11
)
[1] => Array
(
[name] => def-def-45
[qty] => 145
[sub_qty] => 146
[area] => G11
)
[2] => Array
(
[name] => def-def-56
[qty] => 0
)
)
以下内容:
[abc-abc] => Array
(
[0] => Array
(
[name] => abc-abc-34
[qty] => 4
[sub_qty] => 4
[area] => G11
)
[1] => Array
(
[name] => abc-abc-45
[qty] => 145
[sub_qty] => 146
[area] => G11
)
[2] => Array
(
[name] => abc-abc-56
[qty] => 0
)
[3] => Array
(
[name] => abc-abc-67
[qty] => 215
[sub_qty] => 100,
116
[area] => T,
G12
)
)
[def-def] => Array
(
[0] => Array
(
[name] => def-def-34
[qty] => 4
[sub_qty] => 4
[area] => G11
)
[1] => Array
(
[name] => def-def-45
[qty] => 145
[sub_qty] => 146
[area] => G11
)
[2] => Array
(
[name] => def-def-56
[qty] => 0
)
)
我是否需要考虑abc-abc-56
中没有的其他密钥?是否有我应该使用的替代工具或功能?
名称将始终具有3个字母,短划线,后跟3个字母的格式,但之后会随其他字符和数字而变化。所以它可能是:
abc-abc-1,abc-abc1,abc-abc.1或abc-abc_1
但我最关心的是第一个模式正确排序。
非常感谢您的评论!
答案 0 :(得分:1)
如果你有一个多维数组,你可以使用array_map并在回调函数中使用usort。
在回调中使用strnatcmp。
例如:
$array = array_map(function($x){
usort($x, function($a, $b){
return strnatcmp($a['name'], $b['name']);
});
return $x;
}, $array);
对于具有多个名称的单个数组,您可以使用:
function sortNames($a, $b)
{
return strnatcmp($a['name'], $b['name']);
}
usort($array, "sortNames");
print_r($array);