为什么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