在php中根据字段对多维数组排序

在php中根据字段对多维数组排序,php,arrays,sorting,multidimensional-array,Php,Arrays,Sorting,Multidimensional Array,我有如下所示的多维数组,我想在php中根据[name]字段进行排序 Array ( [chicago] => Array ( [community_name] => Chicago, IL [areas] => Array ( [0] => Array (

我有如下所示的多维数组,我想在php中根据
[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");
函数cmp($a,$b)
{
如果($a[“名称”]==b[“名称”]){
返回0;
}
报税表($a[“姓名]<$b[“姓名])?-1:1;
}
usort($响应,“cmp”);
问题陈述:


我想知道我需要在上面的php代码中做些什么更改,以便它根据
name
字段对数组进行排序。上面的php代码没有对任何内容进行排序。它只是按原样打印输入。

根据您的示例,您实际上是在尝试对
区域
子数组进行排序,而不是对整个父数组进行排序。因此,您需要依次遍历每个子数组,并分别对它们进行排序

$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);
$array=[
“芝加哥”=>[
“社区名称”=>“伊利诺伊州芝加哥”,
“区域”=>[
[
“名称”=>[“你好,世界”。]
],
[
'name'=>['Hello'],
],
[
“名称”=>[“管理”。],
],
],
],
“芝加哥及周边地区”=>[
“社区名称”=>“伊利诺伊州芝加哥(及周边地区)”,
“区域”=>[
[
“名称”=>[“进位”。]
],
[
“名称”=>[“细菌”。],
],
],
],
“剑桥芝加哥”=>[
“社区名称”=>“伊利诺伊州剑桥(芝加哥)”,
“区域”=>[
[
“名称”=>[“责任”。]
],
[
“名称”=>[“细菌”],
],
],
],
];
foreach($array as&$locality){
usort($Location['areas'),函数($a,$b){
返回$a['name'][0]$b['name'][0];
});
}
变量转储($数组);

我看了一下代码,看起来不错。我想知道为什么
HELLO WORLD
会在
HELLO
之前出现。想法?因为
H
被认为比
H
的值低<代码>变量转储('H'<'H');//是的。我还有一个问题。我做了一点修改。在其中,我添加了一些重音字符词。我想知道我需要对fiddle中的代码做些什么更改,以便它在排序时忽略重音字符。在o/p中,
Aṕple
应位于
Avocados
之前。您可以使用
iconv()
函数转换字符编码。看这个。这完全取决于你使用的字符。UTF-8(它是什么)可以处理所有角色。您现在使用的是拉丁字符的子集。如果$response是您的数组,那么它的元素没有'name'键,它们的键是'comunity…','area',等等。您的意思是
foreach($response as$town){usort($town['areas','cmp');}
或者类似的东西?您的cmp函数还应该比较
$a['name'][0]==$b['name'][0]
。。。