【问题标题】:PHP - Problem with sorting my multidimensional array?PHP - 对我的多维数组进行排序有问题吗?
【发布时间】:2019-04-25 10:26:06
【问题描述】:

我有一个如下所示的多维数组:

array:3 [
  0 => array:2 [
    "titre" => "Un package test"
    "nbDDL" => "3"
  ]
  1 => array:2 [
    "titre" => "retest"
    "nbDDL" => "1"
  ]
  2 => array:2 [
    "titre" => "ytjrtj"
    "nbDDL" => "1"
  ]
]

我想使用nbDDLASCDESC 的顺序(取决于传入函数参数的变量)对其进行排序。

查看了array_multisort()的方法,但是放不下。

我在 Symfony 3 下工作。 目前,我有:

if($ordreTri == "ASC")
{
    $liste = array_multisort("nbDDL", ASC);
}

感谢您的帮助!

【问题讨论】:

  • 将代码发布为文本而不是图像中的文本,以便人们可以轻松复制粘贴

标签: php arrays symfony sorting multidimensional-array


【解决方案1】:

有几种不同的方法 - 您可以使用usort() 和宇宙飞船运算符<=> 引入自己的自定义排序,但您可以使用array_multisort(),您只需将其与array_column() 结合使用.

您可以通过首先获取所有nbDDLs 来对数组进行排序。然后将其用作array_multisort() 中的排序数组,并按升序排序(SORT_ASC)。将其应用于$array,就完成了!

// By reference, $array is changed
array_multisort(array_column($array, "nbDDL"), SORT_ASC, $array);

这是通过引用完成的,因此您无需将其分配给变量。 array_multisort() 的返回值是一个布尔值,这意味着如果将其分配为

// By reference - $result is bool
$result = array_multisort(array_column($array, "nbDDL"), SORT_ASC, $array);

那么$result 要么是真要么是假,但不是排序数组。

【讨论】:

  • 哇,太好了,感谢您的帮助以及随之而来的解释!非常感谢!
【解决方案2】:

您可以尝试如下:

$data = [
    ['a' => 'a', 'order' => 1],
    ['b' => 'b', 'order' => 3],
    ['c' => 'c', 'order' => 1]
];

array_multisort(array_column($data, 'order'), SORT_DESC, SORT_NUMERIC, $data);

print_r($data);

【讨论】:

    【解决方案3】:

    您可以按照以下方式进行:

    function array_sort($array, $on, $order=SORT_ASC){
    
        $new_array = array();
        $sortable_array = array();
    
        if (count($array) > 0) {
            foreach ($array as $k => $v) {
                if (is_array($v)) {
                    foreach ($v as $k2 => $v2) {
                        if ($k2 == $on) {
                            $sortable_array[$k] = $v2;
                        }
                    }
                } else {
                    $sortable_array[$k] = $v;
                }
            }
    
            switch ($order) {
                case SORT_ASC:
                    asort($sortable_array);
                    break;
                case SORT_DESC:
                    arsort($sortable_array);
                    break;
            }
    
            foreach ($sortable_array as $k => $v) {
                $new_array[$k] = $array[$k];
            }
        }
    
        return $new_array;
    }
    

    使用函数如下:

    $list = array(
       array( 'type' => 'suite', 'name'=>'A-Name'),
       array( 'type' => 'suite', 'name'=>'C-Name'),
       array( 'type' => 'suite', 'name'=>'B-Name')
     );
    
    $list = array_sort($list, 'name', SORT_ASC);
    

    【讨论】:

      猜你喜欢
      • 2013-04-26
      • 2016-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-20
      • 1970-01-01
      相关资源
      最近更新 更多