我有一个15000个元素的数组,每个元素都是一个包含4个元素的数组。我想按照4的第二个元素排序。最初我把原始数组的键作为第二个元素然后k-sorted但不幸的是,一些第二个元素是重复的,因为一个键不能引用我丢失的多个元素转型中的一些要素。我可以通过第二个元素冒泡排序,但我正在寻找至少按nlog(n)顺序运行的东西。任何人都可以想到一个好的算法(或者可能是我不知道的php中的一个函数)可以按第二个元素排序吗?谢谢!
答案 0 :(得分:3)
我认为您可以使用usort
并定义cmp_function以使用第二个元素。
答案 1 :(得分:1)
正如其他人所说,usort或uasort维护数组键是你想要的:
<?php
$myArray = array(
'fruits' => array(
array('apples', 'oranges', 'bananas')
),
'vegetables' => array(
array('lettuce', 'carrots', 'peas')
),
'monkeys' => array(
array('Curious George', 'Amy', 'Marcel')
)
);
// PHP 5.3+ example using a closure
uasort($myArray, function(array $a, array $b) {
// Use whatever sorting algorithm you like
return strnatcasecmp($a[1], $b[1]);
});
var_export($myArray);
运行上面的内容将输出:
array (
'monkeys' =>
array (
0 =>
array (
0 => 'Curious George',
1 => 'Amy',
2 => 'Marcel',
),
),
'vegetables' =>
array (
0 =>
array (
0 => 'lettuce',
1 => 'carrots',
2 => 'peas',
),
),
'fruits' =>
array (
0 =>
array (
0 => 'apples',
1 => 'oranges',
2 => 'bananas',
),
),
)
这是一个不在PHP 5.3之前使用闭包的示例:
sortFunc(array $a, array $b)
{
return strnatcasecmp($a[1], $b[1]);
}
uasort($myArray, 'sortFunc');
答案 2 :(得分:0)
我不知道usort的内部实现是什么,但我敢打赌它比bubblesort更好(它可能是快速排序)。