我有以下两个数组:
ARRAY1
[0] => Array
(
[date] => 2014-02-01
[course_id] => 1
[id] => 24 [reg] => 1
)
[1] => Array
(
[date] => 2014-02-01
[course_id] => 2
[id] => 25
[reg] => 2
)
数组2
[0] => Array
(
[date] => 2014-02-01
[course_id] => 1
[id] => 24
)
[1] => Array
(
[date] => 2014-02-01
[course_id] => 1
[id] => 24
)
[2] => Array
(
[date] => 2014-02-01
[course_id] => 2
[id] => 25
)
[3] => Array
(
[date] => 2014-02-01
[course_id] => 2
[id] => 25
)
我使用array_merge合并了这两个数组,新数组是array3
我使用以下函数对array3进行了排序:
function cmp($a, $b) {
return strnatcasecmp( $a[course_id], $b[course_id] );
}
usort($array3, "cmp");
然而,我希望获得的结果不会显示在我想要的下面,其中来自数组1的course_id = 1始终位于顶部,接着是来自数组2的匹配Course_ids的列表,然后是来自数组的course_id = 2 1,后面是数组2中匹配的Course_ids列表:
[0] => Array
(
[date] => 2014-02-01
[course_id] => 1
[id] => 24
[reg] => 1
)
[1] => Array
(
[date] => 2014-02-01
[course_id] => 1
[id] => 24
)
[2] => Array
(
[date] => 2014-02-01
[course_id] => 1
[id] => 24
)
[3] => Array
(
[date] => 2014-02-01
[course_id] => 2
[id] => 25
[reg] => 2
)
[4] => Array
(
[date] => 2014-02-01
[course_id] => 2
[id] => 25
)
[5] => Array
(
[date] => 2014-02-01
[course_id] => 2
[id] => 25
)
我用来排序数组3的函数并不总能提供所需的结果。请帮您解决这个问题。
答案 0 :(得分:0)
将a
中的id附加到第一个数组中,将b
中的id放在第二个数组中,并在找到相同的id时对合并后的数组进行排序,最后使用区分字符来确定原始数组。
在对合并的数组进行排序时,请在intval(id)上对其进行排序。
PS:这只是区分两个阵列的一种方法。您还可以在数组中添加另一个元素来标识原始数组。
另一种可能的方法是首先单独对数组进行排序然后合并它们。这将更快,但需要比第一种方法更多的编码。
答案 1 :(得分:0)
我设法通过以下链接提供了非常有用的指南来找到答案:
http://agichevski.com/2013/06/02/sorting-a-php-multidimensional-array-by-value/
foreach ($data as $val)
$tmp_age[] = $val['age'];
foreach ($data as $val)
$tmp_name[] = $val['name'];
array_multisort($tmp_age, SORT_DESC, $tmp_name, $data);
我根据自己的数据调整了它,它产生了我想要的结果。
希望这可以帮助其他类似场景。