【问题标题】:Sorting an array by a certain key按某个键对数组进行排序
【发布时间】:2010-07-08 12:12:07
【问题描述】:

我有以下数组:

Array
(
    [Places] => Array
        (
            [public] => 0
            [entities] => Array
                (
                    ...
                )
        )
    [Issues] => Array
        (
            [public] => 1
            [entities] => Array
                (
                    ...
                )
        )

    [Source] => Array
        (
            [public] => 0
            [entities] => Array
                (
                    ...
                )
        )
)

我希望能够通过公钥对数组进行排序。我知道我可能必须使用ksortusort,但我不确定如何实现。

任何想法都会非常感谢!

【问题讨论】:

    标签: php arrays sorting usort ksort


    【解决方案1】:
    usort($array, function ($a, $b) { return $a["public"] - $b["public"]; });
    

    【讨论】:

    • 这主要是可行的,但我丢失了“地点”、“问题”和“来源”键有什么建议吗?
    • 谢谢,现在唯一的问题是我丢失了 entities 键中每个“地点”、“问题”和“来源”的所有元素,这可以修复吗?
    【解决方案2】:

    这是一个有趣的链接:http://www.the-art-of-web.com/php/sortarray/

    我想试试

    usort(usort(array, function), function);
    

    我可以根据要求试用示例代码,但信息已经存在。

    【讨论】:

      【解决方案3】:

      看看这个,使用 array_multisort :

      $test   =   array(
              'Places' => array(
                  'public' => 0,
                  'entities' => array(
      
                  )
              ),
              'Issues' => array(
                  'public' => 1,
                  'entities' => array()
              ),
              'Source' => array(
                  'public' => 0,
                  'entities' => array()
              )
          );
      
          echo '<pre>';
          print_r($test);
          echo '</pre>';
      
          array_multisort($test,SORT_ASC,$test);
      
          echo '<pre>';
          print_r($test);
          echo '</pre>';
      

      【讨论】:

        【解决方案4】:

        使用array_multisort 执行此操作的一般方法是将您的排序值放入其自己的数组中,然后使用它作为主排序数组对两个数组进行排序。

        尝试以下方法:

        $test   =   array(
            'Places' => array(
                'public' => 0,
                'entities' => array(
        
                )
            ),
            'Issues' => array(
                'public' => 1,
                'entities' => array()
            ),
            'Source' => array(
                'public' => 0,
                'entities' => array()
            )
        );
        
        echo '<pre>';
        print_r($test);
        echo '</pre>';
        
        $sort = array();
        foreach ($test as $k => $a) {
            $sort[$k] = $a['public'];
        }
        
        // placing $sort first in array_multisort causes $test to be sorted in same order as the values in $sort
        array_multisort($sort,SORT_ASC,$test);
        
        echo '<pre>';
        print_r($test);
        echo '</pre>';
        

        【讨论】:

          【解决方案5】:

          你可以使用带有回调函数的 usort。

          function cmp($a, $b) {
            return $a['public'] == $b['public'] ? 0 : $a['public'] > $b['public'] ? 1 : -1;
          }
          
          usort($array, "cmp");
          

          【讨论】:

            【解决方案6】:

            试试这个:

            $code = "return (-1*strnatcmp(\$a['public'], \$b['public']));";
            uasort($array, create_function('$a,$b', $code));
            

            【讨论】:

              猜你喜欢
              • 2023-03-11
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-12-29
              • 2013-09-14
              • 1970-01-01
              • 2011-02-10
              • 2021-06-06
              相关资源
              最近更新 更多