2012-10-13 56 views
2

可能重複:
Sort multidimensional Array by Value (2)PHP排序陣列通過特定的按鍵

我怎麼能在它裏面排序特定的按鍵排列:

array(
    array(5, 2), 
    array(5, 3), 
    array(3, 1), 
    array(5, 4) 
); 

這是一個數組有兩個值的數組,我如何按每個數組的第二個值排序,所以結果是:

array(
    array(5, 1), 
    array(5, 2), 
    array(3, 3), 
    array(5, 4) 
); 
+0

我希望這可以幫助你,但看看[我怎麼樣在PHP中的多維數組](http://stackoverflow.com/questions/96759/how-do-i-sort-a-multidimensional-array-in-php) – budwiser

+0

這個問題可以站得更好。它被重複關閉,因爲它與列出的問題之間的差異不容易辨別。 – cHao

回答

2

下面是做這件事的一種方法:

<?php 

$input = array(
    array(5, 2), 
    array(5, 3), 
    array(3, 1), 
    array(5, 4) 
); 

/** 
* Funkily sort the input array. 
* 
* @param array $array 
* 
* @return array 
*/ 
function funky_sort(array $array) { 
    //Get the array of the first elements 
    $first_elements = array_map(function($el) { 
     return $el[0]; 
    }, $array); 

    //Get the array of the second elements 
    $second_elements = array_map(function($el) { 
     return $el[1]; 
    }, $array); 

    //Sort the second elements only 
    sort($second_elements, SORT_NUMERIC); 

    //Combine both arrays to the same format as the original 
    $result = array(); 
    for ($i = 0; $i < count($first_elements); $i++) { 
     $result[] = array($first_elements[$i], $second_elements[$i]); 
    } 

    //Fire away 
    return $result; 

} 

var_dump(funky_sort($input)); 
+0

這實際上得到所需的輸出。 +1 – Lusitanian

1

下面是一些不能解決您的問題的方向(排序很奇怪),但可以引導您找到解決方案。 您可以使用usort功能(http://www.php.net/manual/en/function.usort.php)並定義您自己的比較器。

如果您知道排序邏輯,則將其添加到cmp函數中,如果兩個元素相等,則返回0,如果$ a < $ b則返回-1,否則返回1。

該代碼將是這個樣子:

function cmp($a, $b) 
{ 
    if ($a[1] == $b[1]) { 
     return 0; 
    } 
    return ($a[1] < $b[1]) ? -1 : 1; 
} 

$a = array(
    array(5, 2), 
    array(5, 3), 
    array(3, 1), 
    array(5, 4) 
); 

usort($a, "cmp"); 
+1

你的第一個輸出是'數組(3,1)'而不是'數組(5,1)'作爲請求 – Baba

+0

感謝您指出:) 我給他的問題指示,所以他可以定義cmp函數,但他需要 –

+0

有人對你的回答之前,人們開始投票你... – Baba

-1
<?php 

function sort_by_second($randomArray) 
{ 
    $tmparray1=array(); 
    $tmparray2=array(); 
    foreach ($randomArray as $key=>&$ra) { 
     $tmparray1[$key]=$ra[1]; 
     $tmparray2[$key]=$ra[0]; 
    } 
    asort($tmparray1); 

    $rr=array(); 
    foreach ($tmparray1 as $key=>&$val) { 
     $rr[$key]=array($tmparray2[$key],$val); 
    } 
    return $rr;} 


$myArray = array(
    array(5, 2), 
    array(5, 3), 
    array(3, 1), 
    array(5, 4) 
); 


$tt=sort_by_second($myArray); 
print_r($tt); 

?>