【问题标题】:Sort complex PHP array对复杂的 PHP 数组进行排序
【发布时间】:2017-08-25 11:28:05
【问题描述】:

这是数组的第一部分(源自 JSON 提要)。重复块在 [Attendee] 内,从 [0] 开始。

Array
(
[Code] => 1
[Message] => Successfully retrieved data
[Result] => Array
    (
        [Attendee] => Array
            (
                [0] => Array
                    (
                        [CountryCode] => 44
                        [DemographicData] => Array
                            (
                            )

                        [Email] => firstname.lastname@server.com
                        [FreeTextDataCategories] => Array
                            (
                                [AttendeeFreeTextDataCategory] => Array
                                    (
                                        [0] => Array
                                            (
                                                [DataCategoryId] => 165497
                                                [Value] => Firstname
                                            )

                                        [1] => Array
                                            (
                                                [DataCategoryId] => 165498
                                                [Value] => Lastname
                                            )

                                        [2] => Array
                                            (
                                                [DataCategoryId] => 165500
                                                [Value] => Job Title
                                            )

                                        [3] => Array
                                            (
                                                [DataCategoryId] => 165504
                                                [Value] => Array
                                                    (
                                                    )
                                            )
                                    )
                            )

                        [GuestOfAttendeeId] => Array
                            (
                            )

                        [Id] => 3344468
                        [Name] => Firstname Lastname

                        [Password] => Array
                            (
                            )

                        [PhoneNumber] => 123456789
                        [RegisteredVia] => Email
                        [RegistrationDate] => 2017-06-30T11:30:44.313
                        [SessionId] => 111222333
                        [Status] => Registered
                        [StatusDate] => 2017-06-30T11:30:44.313
                    )
            )
    )

我想按姓氏对参加者[n] 进行排序,我可以轻松地回显一个值,但我不明白如何按它进行排序。 我是这样回应的:

foreach ($result_array['Result']['Attendee'] as $row) {    
echo "<a href=\"mailto:" . $row["Email"] . "\">" . $row["FreeTextDataCategories"]["AttendeeFreeTextDataCategory"][0]["Value"] . " " . $row["FreeTextDataCategories"]["AttendeeFreeTextDataCategory"][1]["Value"]. " </a>";  }

我已经搜索了现有的问题,并试图将我的案例调整为像这样的解决方案,但没有成功: Sorting Complex Arrays by Name - Sort multidimensional array alphabetically - PHP Array Complex Sort

【问题讨论】:

    标签: php sorting multidimensional-array


    【解决方案1】:

    您的问题是 Lastname 不在它自己的字段中。所以你必须提取它(并祈祷你的数据是一致的)。

    function cmp($x, $y) {
        $categoryX = $x['FreeTextDataCategories']['AttendeeFreeTextDataCategory'];
        $lastNameXKey = array_search('165498', array_column($categoryX, 'DataCategoryId'));
        $categoryY = $y['FreeTextDataCategories']['AttendeeFreeTextDataCategory'];
        $lastNameYKey = array_search('165498', array_column($categoryY, 'DataCategoryId'));
        return strcmp($categoryX[$lastNameXKey]['Value'], $categoryY[$lastNameYKey]['Value']);
    }
    
    usort($result_array['Result']['Attendee'], 'cmp');
    

    【讨论】:

    • 对不起,如果我不清楚,但实际上数组中有三个与名称相关的字段。一个称为 ['Name'] (您使用过),还有两个在数据的更深处有点“隐藏”,其中 Firstname 和 Lastname 是分开的。它们分别与 [DataCategoryId] 165497 和 165498 耦合。我曾尝试在各种尝试中引用 ['165498'],但仍然没有运气。
    • 查看我的编辑。在这种情况下,您可以使用array_searcharray_column 来查找要比较的值。 ['165498'] 不起作用,因为 id 不是键而是值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-08
    • 2022-11-15
    • 1970-01-01
    相关资源
    最近更新 更多