【问题标题】:How to sort a multidimensional array by firstName in php?如何在php中按firstName对多维数组进行排序?
【发布时间】:2016-10-19 17:35:42
【问题描述】:

我有一个按 groupName 排序的多维数组(该部分工作正常),并且在每个组内我都有值(groupName、firstName、lastName 等)。基本上我正在尝试按 firstName 对这个多维数组中的每个组进行排序,但我不确定从哪里开始:(。这是我的多维数组:

      function group_assoc($array, $key)
        {
            $array_of_groups = array();
            foreach ($array as $value) {
                $array_of_groups[$value[$key]][] = $value;
            }
            return $array_of_groups;
        }


        $somearray = array(
            array('groupName' => 'Group1', 'phoneNumber' => 13037777777, 'firstName'=>'Jeff','lastName' => 'Jeff'),
            array('groupName' => 'Group2', 'phoneNumber' => 13033213453, 'firstName'=>'Zumia','lastName' => 'Brown'),
            array('groupName' => 'Group3', 'phoneNumber' => 13030098342, 'firstName'=>'Junior','lastName' => 'White'),
            array('groupName' => 'Group2', 'phoneNumber' => 13039899231, 'firstName'=>'Ana','lastName' => 'McLwius'),
            array('groupName' => 'Group1', 'phoneNumber' => 13033422109, 'firstName'=>'first','lastName' => 'last'),
            array('groupName' => 'Group3', 'phoneNumber' => 13033222098, 'firstName'=>'Junior','lastName' => 'Smith')
        );


        $account_requests = group_assoc($somearray, 'groupName');
        print_r($account_request);

并打印我得到的数组:

Array
(
[Group1] => Array
    (
        [0] => Array
            (
                [groupName] => Group1
                [phoneNumber] => 13037777777
                [firstName] => Mike
                [lastName] => Jeff
            )

        [1] => Array
            (
                [groupName] => Group1
                [phoneNumber] => 13033422109
                [firstName] => Ben
                [lastName] => Morris
            )

    )

[Group2] => Array
    (
        [0] => Array
            (
                [groupName] => Group2
                [phoneNumber] => 13033213453
                [firstName] => Zumia
                [lastName] => Brown
            )

        [1] => Array
            (
                [groupName] => Group2
                [phoneNumber] => 13039899231
                [firstName] => Ana
                [lastName] => McLwius
            )

    )

[Group3] => Array
    (
        [0] => Array
            (
                [groupName] => Group3
                [phoneNumber] => 13030098342
                [firstName] => Junior
                [lastName] => White
            )

        [1] => Array
            (
                [groupName] => Group3
                [phoneNumber] => 13033222098
                [firstName] => Junior
                [lastName] => Smith
            )

    )

 )

我知道它是否是一个简单的数组(不是多维数组)我可以这样做:

   usort($peopleArray, function ($v1, $v2) {
        return strcmp($v1['firstName'], $v2['firstName']);
    });

请对如何完成此操作有任何想法?提前非常感谢!

【问题讨论】:

  • 能否提供原始数组而不是print_r
  • @Kld 是的,我刚刚更新了我的问题。请看一下。非常感谢!!
  • 所以首先分组,然后对每个组进行排序。有什么问题?
  • @u_mulder 我已经按组排序了。我的问题是我需要按 firtName 排序,但不知道该怎么做
  • 我不是告诉你按组排序,我是告诉你先对项目进行分组,然后他们对每组项目进行排序。

标签: php arrays sorting multidimensional-array laravel-5


【解决方案1】:

首先创建包含适当项目的组,然后对每个组进行排序:

$groups = array();
foreach ($someArray as $item) {
    $groupName = $item['groupName'];
    if (!isset($groups[$groupName])) {
        $groups[$groupName] = array();
    }
    $groups[$groupName][] = $item;
}

foreach ($groups as &$group) {
    usort($group, function ($v1, $v2) {
        return strcmp($v1['firstName'], $v2['firstName']);
    });
}

【讨论】:

  • 您确定您输入的所有内容都正确吗?我看到你输入了 &$group ?你能更新你的答案吗?非常感谢!
  • 我在您的代码 $groups[$group][] = $item; 的第 7 行也收到错误
  • 除了groupName 而不是group 之外的所有内容都是正确的。
  • 我没有让每个组按名字排序:(。你做 print_r($group) 吗??你能告诉我你的输出吗?谢谢
  • 你的答案就是我需要的。但是,当一个用户的名字有一个大写字母(例如:Jeff)而另一个是小写字母(例如:第一个)(它只是没有正确排序)时,我在排序 Group1 时遇到了问题。我刚刚用 Group1 的新值更新了我的问题。请问可以测试吗?在此之后,我将接受您作为正确答案的答案。非常感谢!!
【解决方案2】:

您需要先按组对行进行分组,然后您才能对每个组进行排序

$someArray = array(
                array('groupName' => 'Group1', 'phoneNumber' => 13037777777, 'firstName'=>'Mike','lastName' => 'Jeff'),
                array('groupName' => 'Group2', 'phoneNumber' => 13033213453, 'firstName'=>'Zumia','lastName' => 'Brown'),
                array('groupName' => 'Group3', 'phoneNumber' => 13030098342, 'firstName'=>'Junior','lastName' => 'White'),
                array('groupName' => 'Group2', 'phoneNumber' => 13039899231, 'firstName'=>'Ana','lastName' => 'McLwius'),
                array('groupName' => 'Group1', 'phoneNumber' => 13033422109, 'firstName'=>'Ben','lastName' => 'Morris'),
                array('groupName' => 'Group3', 'phoneNumber' => 13033222098, 'firstName'=>'Junior','lastName' => 'Smith')
            );

    $sortedArr = array();
    foreach($someArray as $row) {
        $sortedArr[$row['groupName']][] = $row;
    }


    foreach ($sortedArr as &$group) {
        usort($group, function ($v1, $v2) {
            return strcmp($v1['firstName'], $v2['firstName']);
        });
    }

    print_r($sortedArr);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-15
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多