[英]Sort array by 4 keys or columns in PHP
我正在尝试使用array_multisort()对数组进行排序,但它似乎仅对第一列进行排序。 我希望它按4列排序。 这是我的功能。
function array_sort_by_column(&$arr, $col, $col2, $col3, $col4, $dir = SORT_DESC) {
foreach ($arr as $key => $row) {
$sort_col[$key] = $row[$col];
$sort_col2[$key] = $row[$col2];
$sort_col3[$key] = $row[$col3];
$sort_col4[$key] = $row[$col4];
}
array_multisort($sort_col, $dir, $sort_col2, $dir, $sort_col3, $dir, $sort_col4, $dir, $arr);
}
这里的输入是一个二维数组,如$ arr,然后是我想按$ col1,$ col2,$ col3和$ col4排序的列名。
编辑:对不起,我的意思是二维数组
样品:
$arr = array(
0 => array(
'group_id' => '1',
'points' => '5',
'rank' => '10',
'diff' => '1'
),
1 => array(
'group_id' => '1',
'points' => '1',
'rank' => '2',
'diff' => '4'
),
2 => array(
'group_id' => '2',
'points' => '1',
'rank' => '1',
'diff' => '2'
),
3 => array(
'group_id' => '2',
'points' => '9',
'rank' => '0',
'diff' => '-11'
),
);
array_sort_by_column($arr, 'group_id', 'points', 'rank', 'diff');
正如Barmar指出的那样,您将需要使用usort 。 您应该将所有排序功能放在一个函数或类方法中:
public function sort($a, $b)
{
$key = $this->sort_key;
$asc = $this->sort_asc;
if (gettype($a[$key]) == 'integer') {
if ($a[$key] == $b[$key]) return 0;
if ($asc == 'asc') {
return ($a[$key] < $b[$key]) ? -1 : 1;
} elseif ($asc == 'desc') {
return ($a[$key] > $b[$key]) ? -1 : 1;
}
} elseif (gettype($a[$key]) == 'string') {
$valA = preg_replace("/[^A-Za-z0-9]/", "", strtolower($a[$key]));
$valB = preg_replace("/[^A-Za-z0-9]/", "", strtolower($b[$key]));
if ($asc == 'asc') {
return strcmp($valA, $valB);
} elseif ($asc == 'desc') {
return strcmp($valB, $valA);
}
}
}
并像这样调用它:
$this->sort_key = 'group_id';
$this->sort_asc = 'asc';
usort($array, array($this, 'sort'));
您需要确保您正在上课 。 上面的方法还可以让您对字符串而不是整数进行排序(即您将来可以重新使用它)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.