【问题标题】:Trying to sort PHP associative array by one key尝试一键对PHP关联数组进行排序
【发布时间】:2012-10-19 22:01:31
【问题描述】:

我正在尝试在 PHP 中对这个关联数组进行排序,但我发现的所有示例均无效。

未排序的数组是这样构建的:

                //push into array
            $displayArray = array_push_assoc($displayArray, 'ContactID', $ContactID);
            $displayArray = array_push_assoc($displayArray, 'ContactFirstName', $ContactFirstName);
            $displayArray = array_push_assoc($displayArray, 'ContactLastName', $ContactLastName);
            $displayArray = array_push_assoc($displayArray, 'Ann_Desc', $CG_Desc);
            $displayArray = array_push_assoc($displayArray, 'DaysAway', $daysAway);

我要做的就是按与“DaysAway”键关联的值升序对该数组进行排序

我试过这个:

            function cmp($a, $b)
        {
            if ($a['DaysAway'] == $b['DaysAway']) {
                return 0;
            }

            return ($a['DaysAway'] < $b['DaysAway']) ? -1 : 1;
        }
        usort($displayArray, 'cmp');

        print_r($displayArray);
        print "<br>";

但这一切似乎只是对原始数组中的最后一行进行随机排序

感谢您的帮助。

【问题讨论】:

    标签: php sorting associative-array


    【解决方案1】:

    删除所有array_push_assoc,因为没有该名称的函数。

    而只是输入$displayArray['ContactID'] = $ContactID; 等等。

    您应该在包含每个 $displayArray 条目的父数组上调用 usort,而不是 $displayArray 本身。

    【讨论】:

    • 你不认为 OP 可以用这个名字有自己的功能吗?
    • 是的,但是当简单的语法可以做到这一点时,这是不必要的开销。
    • @Kolink:平心而论,你要求删除它since there's no function by that name.,不是因为it's unnecessary overhead..只是在你知道的地方感到痛苦>:)
    • 你好 Kolink。我按照您的建议替换了 array_push_assoc。尽管如此,仍然无法按“DaysAway”排序。如何“在父数组上调用 usort?”
    • 好吧,我假设您实际上是将这些$displayArrays 放入一个大数组中,而不仅仅是重复覆盖同一个变量?
    【解决方案2】:

    试试这个功能:

    function subval_sort($a,$subkey) {
    foreach($a as $k=>$v) {
    $b[$k] = strtolower($v[$subkey]);
      }
      asort($b);
      foreach($b as $key=>$val) {
            $c[] = $a[$key];
      }
      return $c;
    }
    

    $a 是您要排序的数组,而 $subkey 是您要排序的字段。

    【讨论】:

    • usort($a,'strcasecmp') 不会做同样的事情吗?
    • 我原来的关联数组包含四个数组。使用上述(和其他示例)后,使用 print_r,排序后我只看到一个数组..!?
    猜你喜欢
    • 2019-04-01
    • 1970-01-01
    • 2014-07-19
    • 2018-03-12
    • 1970-01-01
    • 2014-05-22
    • 2013-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多