【问题标题】:How to sort an array in this way in php如何在php中以这种方式对数组进行排序
【发布时间】:2009-10-22 00:59:47
【问题描述】:

像 php 中的函数 usort 但如果两个成员比较相等,则它们的密钥应该相同。 例如: $arrayToSort = array(2,6,1,3,3);

排序后返回

array
  1 =>  1
  2 =>  2
  3 =>  3
  3 =>  3
  4 =>  6

【问题讨论】:

    标签: php sorting


    【解决方案1】:

    针对 meder 的回答,您使用的是慢速函数,例如 in_array()array_push(),而不是快速构造,例如 isset()[] 运算符。您的代码应如下所示:

    $arr = array(1,2,2,2,3);
    
    $new = array();
    foreach ($arr as $v)
    {
        $new[$v][] = $v;
    }
    
    // then you can sort the array if you wish
    ksort($new);
    

    请注意,您所做的在某种程度上类似于 PHP 自己的 array_count_values()

    【讨论】:

      【解决方案2】:

      数组中不能有两个具有相同键的元素。但是,您可以将两个三组合成一个数组,这样 1=> 1、2 => 2 和 3 => array(3,3)。

      【讨论】:

        【解决方案3】:

        你不能有两个相同的键。键是唯一的。

        如果您尝试在代码中创建它,会发生以下情况。

        $data[1] = 1;  // Assigns value 1 to key 1;   1 element in array
        $data[2] = 2;  // Assigns value 2 to key 2;   2 elements in array
        $data[3] = 3;  // Assigns value 3 to key 3;   3 elements in array
        $data[3] = 3;  // Reassigns value 3 to key 3; STILL 3 elements in array
        $data[4] = 6;  // Assigns value 6 to key 4;   4 elements in array
        

        【讨论】:

          【解决方案4】:

          你的例子没有意义。同一个数组中不能有两个相等的键。如果要对数组的值进行排序并保留它们的键,请使用asort()。或http://ca.php.net/manual/en/array.sorting.php 表中的任何功能,在“维护键关联”下说“是”。

          【讨论】:

            【解决方案5】:

            不确定是否有原生函数,但这个可能是你想要的。

            <?php
            $arr = array(1,2,2,2,3);
            
            function arrayKeyJoin( $arr ) {
                $newArr = array();
                foreach ( $arr as $item ) {
             if ( !in_array( $item, array_keys($newArr) ) ) {
                 $newArr[$item] = array();
             }
             array_push( $newArr[$item], $item );
                }
                return $newArr;
            }
            
            echo '<pre>', var_dump( arrayKeyJoin( $arr ) ), '</pre>';
            

            输出:

            array(3) {
              [1]=>
              array(1) {
                [0]=>
                int(1)
              }
              [2]=>
              array(3) {
                [0]=>
                int(2)
                [1]=>
                int(2)
                [2]=>
                int(2)
              }
              [3]=>
              array(1) {
                [0]=>
                int(3)
              }
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2019-08-02
              • 1970-01-01
              • 2012-12-11
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多