为什么array_multisort在我的情况下不排序


Why array_multisort doesn't sort in my case?

为什么array_multisort在我的情况下不排序?

这种情况很简单,我遵循了许多示例手册,我不知道为什么它不起作用。理论上它应该 100% 工作。也许我花了很多时间试图一遍又一遍地修复它,但现在我看不到同样的事情。

情况是这样的:

我想对我的数组$this->array对其他数组中的列进行排序$order

简单的排序功能:

$preSort = [];
        foreach ($order as $column => $direction) {
            $valueArray = [];
            foreach ($this->array as $key => $row) {
                $valueArray[] = $row[$column];
            }
            $preSort[] = $valueArray;
            $preSort[] = $this->getSortDirection($direction) | $this->getSortType(key($valueArray), $column);
        }
        $preSort[] = $this->array;
call_user_func_array('array_multisort', $preSort);

这是数据的样子: $order

array ('id' => 'asc', 'name' => 'desc',)

$this->array

array ( 0 => array ( 'id' => 1, 'name' => 'samsonasik', 'description' => 'aaaaaaa', ), 1 => array ( 'id' => 2, 'name' => 'abdul malik ikhsan', 'description' => 'bbbbbb', ), 2 => array ( 'id' => 3, 'name' => 'superman', 'description' => 'cccccccc', ), )

在这里,我使用了额外的功能:

protected function getSortDirection($string)
{
    return mb_strtolower($string) == 'asc' ? SORT_ASC : SORT_DESC;
}
protected function getSortType($key, $column)
{
    return is_numeric($this->array[$key][$column]) ? SORT_NUMERIC : SORT_STRING;
}

array_multisort签名如下所示:

bool array_multisort ( array &$array1 [, mixed $array1_sort_order = SORT_ASC
    [, mixed $array1_sort_flags = SORT_REGULAR [, mixed $... ]]] )

$sort_order$sort_flags 是两个参数,因此

$array, SORT_ASC | SORT_STRING

你需要

$array, SORT_ASC, SORT_STRING