【问题标题】:Sorting Php associative array based on key value基于键值对Php关联数组进行排序
【发布时间】:2014-07-19 20:12:43
【问题描述】:

好吧,伙计们, 我有一个以下格式的 php 关联数组。

groupdata: Array
(
    [0] => Array
        (
            [id] => 3324
            [name] => Testme2
            [creationDate] => 31-MAR-14 04.18.29.618000 PM

        )

    [1] => Array
        (
            [id] => 3325
            [name] => paris
            [creationDate] => 31-MAR-14 06.43.28.291000 PM
        )

    [2] => Array
        (
            [id] => 3236
            [name] => GL_HF
            [creationDate] => 29-MAY-14 12.42.01.444000 PM
        )

    [3] => Array
        (
            [id] => 3251
            [name] => attempting
            [creationDate] => 24-FEB-14 03.47.54.732000 PM
        )

    [4] => Array
        (
            [id] => 3272
            [name] => Testme
            [creationDate] => 03-MAR-14 11.24.58.671000 AM
        )
)

现在我想根据他们的名字对这个数组进行排序。 我怎样才能做到这一点?

我曾尝试使用 ksort/asort 方法,但没有成功。

想要的数组是:

groupdata: Array
(
 [0] => Array
        (
            [id] => 3251
            [name] => attempting
            [creationDate] => 24-FEB-14 03.47.54.732000 PM
        )
[1] => Array
        (
            [id] => 3236
            [name] => GL_HF
            [creationDate] => 29-MAY-14 12.42.01.444000 PM
        )
[2] => Array
        (
            [id] => 3325
            [name] => paris
            [creationDate] => 31-MAR-14 06.43.28.291000 PM
        )
[3] => Array
        (
            [id] => 3272
            [name] => Testme
            [creationDate] => 03-MAR-14 11.24.58.671000 AM
        )
[4] => Array
        (
            [id] => 3324
            [name] => Testme2
            [creationDate] => 31-MAR-14 04.18.29.618000 PM

        )
)

【问题讨论】:

  • 使用usort
  • 数据是否来自数据库?
  • 我建议您更改标题,因为它具有误导性

标签: php sorting associative-array


【解决方案1】:
$price = array();
foreach ($groupdata as $key => $row)
{
    $price[$key] = $row['name'];
}
array_multisort($price, SORT_DESC, $groupdata);

阅读更多array_multisort()

【讨论】:

  • 你的解决方案是正确的,但有点矫枉过正
  • 非常感谢!!我已经使用了 SORT_ASC,因为我希望它们按升序排列 :) 这按预期和期望的那样工作;)
  • array_multisort 根据区分大小写的字母对数据进行排序。应用此函数的示例输出如下: 1. 1750test 2. 1st Group 3. AL 4. ActiveTeach-2 5. Created today 30_5 6. Not a empty group 7. Not a empty group 8. Qwerty 9. Test210 10 . 我的电子书 请注意第 10 个条目,即我的电子书最后不是必需的。所以我使用了 Kevin 下面建议的 usort 函数!
【解决方案2】:

使用usort,这样您就可以定义自己的方式来比较元素:

function cmp($a, $b) {
    if ($a['name'] == $b['name']) {
        return 0;
    }
    return ($a['name'] < $b['name']) ? -1 : 1;
}


usort($your_array, "cmp");

【讨论】:

    【解决方案3】:

    或者,您可以将usort()strtolower() 结合使用。考虑这个例子:

    $groupdata = array(array('id' => 3324,'name' => 'Testme2','creationDate' => '31-MAR-14 04.18.29.618000 PM'),array('id' => 3325,'name' => 'paris','creationDate' => '31-MAR-14 04.18.29.618000 PM'),array('id' => 3236,'name' => 'GL_HF','creationDate' => '31-MAR-14 04.18.29.618000 PM'),array('id' => 3251,'name' => 'attempting','creationDate' => '31-MAR-14 04.18.29.618000 PM'),array('id' => 3272,'name' => 'Testme','creationDate' => '31-MAR-14 04.18.29.618000 PM'),);
    
    function sorter($a, $b) {
        if ($a['name'] == $b['name']){
            return 0;
        }
        return strtolower($a['name']) < strtolower($b['name']) ? -1 : 1;
    }
    
    usort($groupdata, 'sorter');
    

    Sample Output

    【讨论】:

    • 谢谢凯文。这是预期的:)
    猜你喜欢
    • 2018-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-25
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多