PHP在二维数组中按键排序数组
在Php中,我有这样一个数组PHP在二维数组中按键排序数组,php,arrays,sorting,multidimensional-array,Php,Arrays,Sorting,Multidimensional Array,在Php中,我有这样一个数组 $task_array = array( '0' => array('task_name' => 'tsk3','task_chapter_name' => 'chapter3'), '1' => array('task_name' => 'tsk1','task_chapter_name' => 'chapter1'), '2' => array('task_name' => 'tsk2','
$task_array = array(
'0' => array('task_name' => 'tsk3','task_chapter_name' => 'chapter3'),
'1' => array('task_name' => 'tsk1','task_chapter_name' => 'chapter1'),
'2' => array('task_name' => 'tsk2','task_chapter_name' => 'chapter2'),
'3' => array('task_name' => 'tsk6','task_chapter_name' => 'chapter6'),
'4' => array('task_name' => 'tsk4','task_chapter_name' => 'chapter3'),
'5' => array('task_name' => 'tsk6','task_chapter_name' => 'chapter4'),
'6' => array('task_name' => 'tsk6','task_chapter_name' => 'chapter7')
);
我想做的是按task\u chapter\u name
排序,但还有一个条件是,如果task\u chapter\u name
值相同,那么下一次排序应该是task\u name
明智的
所需输出
$task_array = array(
'0' => array('task_name' => 'tsk1','task_chapter_name' => 'chapter1'),
'1' => array('task_name' => 'tsk2','task_chapter_name' => 'chapter2'),
'2' => array('task_name' => 'tsk3','task_chapter_name' => 'chapter3'),
'3' => array('task_name' => 'tsk4','task_chapter_name' => 'chapter3'),
'4' => array('task_name' => 'tsk6','task_chapter_name' => 'chapter4'),
'5' => array('task_name' => 'tsk6','task_chapter_name' => 'chapter6'),
'6' => array('task_name' => 'tsk6','task_chapter_name' => 'chapter7')
);
我的问题被标记为重复,但在此我想通知您,我有多维数组的优先级排序,我的首要任务是按
task\u chapter\u name
排序,如果我在task\u chapter\u name
中得到相同的值,那么应该使用task\u name进行排序,提取列并按顺序排序,最后对原始数组进行排序。显然,您可以对不同订单的不同数组使用SORT\u ASC
或SORT\u DESC
:
array_multisort(array_column($task_array, 'task_chapter_name'),
array_column($task_array, 'task_name'),
$task_array);
PHP>=5.5.0是array\u column()所必需的,或者使用。或者,您可以循环并构建用于上述排序的数组:
foreach($task_array as $val) {
$chap[] = $val['task_chapter_name'];
$task[] = $val['task_name'];
}
以前做过这个。。。等等,好的。等等@帕夫林,难道你看不出我有多个键要按优先级排序吗?我的错,使用array\u multisort
,正如Linesofcode所建议的那样。运行此代码后,它返回1:-(@PunitGajjar Check$task\u array
)。
foreach ($task_array as $key => $row) {
$taskChapterName[$key] = $row['task_chapter_name'];
$taskName[$key] = $row['task_name'];
}
array_multisort($taskChapterName, SORT_ASC, $taskName, SORT_ASC, $task_array);