symfony PHP -对多维数组进行排序时出现问题?

fnvucqvd  于 2022-12-04  发布在  PHP
关注(0)|答案(4)|浏览(164)

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

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);
}

谢谢你的帮助!

bf1o4zei

bf1o4zei1#

有几种不同的方法可以实现这一点--你可以通过使用usort()和飞船操作符<=>来引入你自己的自定义排序,但是你也可以使用array_multisort(),你只需要把它和array_column()结合起来。
你可以通过首先读取所有的nbDDL来对数组进行排序。然后将其用作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不是真就是假,但不是排序数组。

vxf3dgd4

vxf3dgd42#

您可以尝试如下:

$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);
hof1towb

hof1towb3#

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

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);
x3naxklr

x3naxklr4#

通常,你可以使用array_multisort来对数组进行排序,但是奇怪的是,在php7.4中它返回boolean(true或false),而不是像php5中那样返回sorted array。我的意思是,我们真正需要的是一个sorted array,而不是布尔值。

相关问题