2010-07-13 26 views
1

我有一個15000個元素的數組,每個元素都是4個元素的數組。我想按照4的第二個元素進行排序。最初我將原始數組的鍵作爲第二個元素,然後進行k排序,但不幸的是,第二個元素的一些是重複的,因爲一個鍵不能引用多個元素一些轉型因素。我可以通過第二個元素進行冒泡排序,但是我正在尋找至少按照nlog(n)的順序運行的東西。任何人都可以想到一個好的算法(或者可能是一個我不知道的php函數),它可以通過第二個元素進行排序嗎?謝謝!在PHP中對陣列數組進行排序 - >需要一個好的算法

回答

3

我想你可以使用usort並定義cmp_function來使用第二個元素。

0

我不知道usort的內部實現是什麼,但我敢打賭它比bubblesort更好(這可能是快速排序)。

1

正如其他人所指出的,usortuasort維持數組的鍵是你想要什麼:

<?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'); 
+0

我想你應該指出,closu res,因此您的解決方案僅在PHP 5.3.0及更高版本中受支持 – 2010-07-13 02:56:06

+0

本示例使用閉包,僅適用於PHP 5.3+ :) – 2010-07-13 03:14:58

相關問題