php - 根据php中的字段对多维数组进行排序
问题描述
我有如下所示的多维数组,我想根据 php.ini 中的[name]
字段进行排序。
Array
(
[chicago] => Array
(
[community_name] => Chicago, IL
[areas] => Array
(
[0] => Array
(
[name] => Array
(
[0] => HELLO WORLD.
)
)
[1] => Array
(
[name] => Array
(
[0] => Hello
)
)
[2] => Array
(
[name] => Array
(
[0] => Administration.
)
)
)
)
[chicago-and-surrounding-areas] => Array
(
[community_name] => Chicago (and surrounding areas), IL
[areas] => Array
(
[0] => Array
(
[name] => Array
(
[0] => Carry.
)
)
[1] => Array
(
[name] => Array
(
[0] => Bacteria.
)
)
)
)
[cambridge-chicago] => Array
(
[community_name] => Cambridge (Chicago), IL
[areas] => Array
(
[0] => Array
(
[name] => Array
(
[0] => Responsibility.
)
)
[1] => Array
(
[name] => Array
(
[0] => Bacteria.
)
)
)
)
)
这就是我想要实现的目标:
Array
(
[chicago] => Array
(
[community_name] => Chicago, IL
[areas] => Array
(
[0] => Array
(
[name] => Array
(
[0] => Administration
)
)
[1] => Array
(
[name] => Array
(
[0] => Hello
)
)
[2] => Array
(
[name] => Array
(
[0] => HELLO WORLD.
)
)
)
)
[chicago-and-surrounding-areas] => Array
(
[community_name] => Chicago (and surrounding areas), IL
[areas] => Array
(
[0] => Array
(
[name] => Array
(
[0] => Bacteria.
)
)
[1] => Array
(
[name] => Array
(
[0] => Carry.
)
)
)
)
[cambridge-chicago] => Array
(
[community_name] => Cambridge (Chicago), IL
[areas] => Array
(
[0] => Array
(
[name] => Array
(
[0] => Bacteria.
)
)
[1] => Array
(
[name] => Array
(
[0] => Responsibility.
)
)
)
)
)
这是我尝试过的,但我认为还需要做更多的工作。
function cmp($a, $b)
{
if ($a["name"] == $b["name"]) {
return 0;
}
return ($a["name"] < $b["name"]) ? -1 : 1;
}
usort($response,"cmp");
问题陈述:
我想知道我需要在上面的 php 代码中进行哪些更改,以便它根据name
字段对数组进行排序。上面我的 php 代码没有对任何东西进行排序。它只是按原样打印输入。
解决方案
根据您的示例,您实际上是在尝试areas
对子数组进行排序,而不是对整个父数组进行排序。因此,您需要依次遍历每个子数组并分别对它们进行排序。
$array = [
'chicago' => [
'community_name' => 'Chicago, IL',
'areas' => [
[
'name' => ['HELLO WORLD.']
],
[
'name' => ['Hello'],
],
[
'name' => ['Administration.'],
],
],
],
'chicago-and-surrounding-areas' => [
'community_name' => 'Chicago (and surrounding areas), IL',
'areas' => [
[
'name' => ['Carry.']
],
[
'name' => ['Bacteria.'],
],
],
],
'cambridge-chicago' => [
'community_name' => 'Cambridge (Chicago), IL',
'areas' => [
[
'name' => ['Responsibility.']
],
[
'name' => ['Bacteria'],
],
],
],
];
foreach ($array as &$locality) {
usort($locality['areas'], function ($a, $b) {
return $a['name'][0] <=> $b['name'][0];
});
}
var_dump($array);
推荐阅读
- mql4 - 请帮我将 Pinescript 转换为 MQL4
- angular - 在角度组件中导入js
- laravel - 已解决:我对 BackPack 中的可重复 -> select2_from_array 字段有疑问
- powershell - 从特定目录获取文件并将它们放在具有新文件名的平面结构中
- javascript - JavaScript 函数返回两次但只被调用一次
- javascript - 当我拆分它并使用它时输入类型时间处理更改反应分钟来分隔数字
- r - 有没有办法通过输入文件并行运行 R 脚本?
- python - 如何迭代多个级别和值数组的字典
- javascript - Apache Charts 甜甜圈样式/功能
- javascript - 在铬中执行 WritableStream.close() 时“在后台工作”光标