php - 按字母排序数组然后数字不起作用
问题描述
/ 开始更新 /
如果我针对单个数组数组而不是数组数组数组,则以下解决方案将起作用。
这只是关联数组的一部分,每个分组的部分都需要排序。请参阅更新的数组。
我尝试了以下方法,但它似乎没有击中子数组:
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
但我最关心的是第一个模式是否正确排序。
非常感谢您的评论!
解决方案
如果你有一个多维数组,你可以使用array_map并在回调函数中使用usort 。
在 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);
推荐阅读
- android - android.widget.TextView.getText() 在空对象引用上
- javascript - 站点缓存时,根相对链接 url 在 amp html 中是否有效?
- wpf - 如何增加所有滚动条的大小(应用程序范围)?
- react-native - 如何从反应原生应用程序中的 URL 查看和共享 pdf?
- java - 有意拨打电话后让手机休眠
- javascript - 如何在 nuxtjs 中控制路由渲染
- html - 如何一次按标签或类查找多个元素
- python - 使用 LSTM 单元训练 RNN 时的 RAM 内存使用情况
- spring-boot - 使用 docker 容器和 nginx 运行 Spring boot App
- c# - 如何等待作者做出反应 discord.net