gpt4 book ai didi

php - 按 3 个值对多维数组进行排序,或按值将数组拆分为 3 个数组

转载 作者:搜寻专家 更新时间:2023-10-31 21:04:06 24 4
gpt4 key购买 nike

我有一个像这样的多维数组:

maildate | mag | panel | status
2-22-16 | green | 1 | pending
2-22-16 | green | 3 | completed
2-22-16 | green | 2 | working
2-23-16 | red | 1 | pending
2-22-16 | blue | 1 | complete

我需要先按状态排序,然后是日期,然后是杂志,最后是版本。我曾尝试使用此功能,它对状态很有用,但我无法让它在相同状态下执行日期。

// function to sort mulitdimensional array by key
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;
}
// sort lblist array by status
$lblist = array_sort($lblist, 'status', SORT_ASC);

我也有这个功能,貌似可以,但是状态组被分割了。

function sortByOrder($a, $b){
if ($b['status'] == $a['status']) {
if ($b['maildate'] == $a['maildate']) {
if ($b['mag'] == $a['mag']) {
return $b['panel'] - $a['panel'];
}
else {
return $b['mag'] - $a['mag'];
}
}
else {
return $b['maildate'] - $a['maildate'];
}
}
else {
return $b['status'] - $a['status'];
}
}
usort($lblist, 'sortByOrder');

我想也许在数组排序后按状态划分数组以将它们保持在一起,然后对每个“子”数组进行其他排序。

最佳答案

考虑使用 array_multisort()但首先捕获内部数组:

// RECREATE ARRAY    
$mail = array();
$mail[0]['maildate'] = '2-22-16'; $mail[0]['mag'] = 'green'; $mail[0]['panel'] = 1; $mail[0]['status'] = 'pending';
$mail[1]['maildate'] = '2-22-16'; $mail[1]['mag'] = 'green'; $mail[1]['panel'] = 3; $mail[1]['status'] = 'completed';
$mail[2]['maildate'] = '2-22-16'; $mail[2]['mag'] = 'green'; $mail[2]['panel'] = 2; $mail[2]['status'] = 'working';
$mail[3]['maildate'] = '2-23-16'; $mail[3]['mag'] = 'red'; $mail[3]['panel'] = 1; $mail[3]['status'] = 'pending';
$mail[4]['maildate'] = '2-22-16'; $mail[4]['mag'] = 'blue'; $mail[4]['panel'] = 1; $mail[4]['status'] = 'completed';

$maildate = array();
$mag = array();
$panel = array();
$status = array();

// CAPTURE INNER ARRAYS
foreach ($mail as $rows) {
foreach ($rows as $key => $value) {
switch ($key) {
case 'maildate': $maildate[] = date_create_from_format('m-d-y', $value)->format('Y-m-d'); break;
case 'mag': $mag[] = $value; break;
case 'panel': $panel[] = $value; break;
case 'status': $status[] = $value; break;
}
}
}

// APPLY MULTIPLE SORTS TO MAIN ARRAY
array_multisort($status, SORT_ASC, $maildate, SORT_ASC,
$mag, SORT_ASC, $panel, SORT_ASC, $mail);

关于php - 按 3 个值对多维数组进行排序,或按值将数组拆分为 3 个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35586591/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com