【发布时间】:2019-04-01 01:40:35
【问题描述】:
我正在尝试在 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 版本 +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
【问题讨论】:
标签: php arrays sorting associative-array