php - 尝试在 PHP 中对关联数组进行排序
问题描述
我正在尝试在 PHP 中对这个关联数组进行排序,按字段排序name
$fonts = array(
0 => ["index" => 0, "name" => "Arial", "path" => "assets/fonts/arial.ttf"],
1 => ["index" => 1, "name" => "Times", "path" => "assets/fonts/times.ttf"],
2 => ["index" => 2, "name" => "Roboto", "path" => "assets/fonts/roboto.ttf"],
3 => ["index" => 3, "name" => "AlexBrush", "path" => "assets/fonts/AlexBrush-Regular.ttf"],
);
我想要做的是按名称对条目进行排序,但保持与条目本身关联的键,所以我想要的是:
$fonts = array(
3 => ["index" => 3, "name" => "AlexBrush", "path" => "assets/fonts/AlexBrush-Regular.ttf"],
0 => ["index" => 0, "name" => "Arial", "path" => "assets/fonts/arial.ttf"],
2 => ["index" => 2, "name" => "Roboto", "path" => "assets/fonts/roboto.ttf"],
1 => ["index" => 1, "name" => "Times", "path" => "assets/fonts/times.ttf"],
);
这是暴露问题的最少代码(PHP ver +7):
function cmp($a, $b)
{
return strcmp($a["name"], $b["name"]);
}
$fonts = array(
0 => ["index" => 0, "name" => "Arial", "path" => "assets/fonts/arial.ttf"],
1 => ["index" => 1, "name" => "Times", "path" => "assets/fonts/times.ttf"],
2 => ["index" => 2, "name" => "Roboto", "path" => "assets/fonts/roboto.ttf"],
3 => ["index" => 3, "name" => "AlexBrush", "path" => "assets/fonts/AlexBrush-Regular.ttf"],
);
uasort($fonts, "cmp");
for($i = 0; $i < 4; $i++)
{
echo "<br/>".$fonts[$i]["name"];
}
我正在使用uasort()
它,因为它应该在对数组进行排序时保持键的关联。不幸的是,如果我打印数组,我会得到相同的顺序,即:
Arial
Times
Roboto
AlexBrush
解决方案
像这样sort
按名称执行并循环使用foreach()
<?php
$fonts = array(
0 => ["index" => 0, "name" => "Arial", "path" => "assets/fonts/arial.ttf"],
1 => ["index" => 1, "name" => "Times", "path" => "assets/fonts/times.ttf"],
2 => ["index" => 2, "name" => "Roboto", "path" => "assets/fonts/roboto.ttf"],
3 => ["index" => 3, "name" => "AlexBrush", "path" => "assets/fonts/AlexBrush-Regular.ttf"],
);
uasort($fonts, function($a, $b) {
return strcmp($a['name'], $b['name']);
});
print_r($fonts);
foreach($fonts as $font){
echo $font["name"].PHP_EOL;
}
?>
编辑:根据OP的评论,
$indexed_array = array_column($fonts,'name','index'); // array column map name by index
print_r($indexed_array);
echo $indexed_array[3];
推荐阅读
- mysql - 如何从 MySQL 获取产品变体
- php - 如何向 SMTP 脚本添加身份验证?
- c# - 如何在视口大小更改时不更改相机位置?
- c# - 如何在 cefsharp 中播放 html5 播放器视频
- python - 图像处理:将图像转换为灰度
- docker - 使用 docker 从源代码构建 tensorflow-serving docker gpu?
- python - 有没有一种方法可以在不评估 jupyter notebook 的情况下输出表达式
- regex - 使用 PowerShell 将前导零添加到文件名
- reactjs - 如何在 React-js/React native 中处理多个 API 调用的全局加载屏幕?
- java - 使用终端在 Ubuntu 上运行 java 项目