2017-04-21 54 views
0

我真的很努力,但沒有按照我想要的方式在PHP中對我的二維數組進行排序。數字然後按字母順序排列的PHP中的二維數組

我有存儲的名稱和個人的年齡,看起來像一個數組:

$array[0][0]="Alex" 
$array[0][1]=38 
$array[1][0]="Peggy" 
$array[1][1]=37 
$array[2][0]="Ben" 
$array[2][1]=38 

等等....

我設法解決這陣年齡做以下:

usort($DATA, function($a, $b) { 
    return $b[1] - $a[1]; 
}); 

但我想添加另一層排序乾淨和按字母順序排序的年齡相同的人。因此,首先,該陣列由年齡來分類,然後如果一些年齡相同,一個字母排序完成第一和Ben之後它有亞歷...

回答

1

按照usort() documentation,「比較函數必須返回一個整數小於,等於或大於零,如果第一個參數被認爲分別小於,等於或大於第二個參數「。因此,而不是隻是立即返回,檢查不同的是零並採取相應措施:

<?php 
$array = [["Alex",38], ["Peggy",37], ["Ben",38]]; 
usort($array, function($a, $b) { 
    $diff = $b[1] - $a[1]; 
    if ($diff === 0) { 
     $diff = strcmp($a[0], $b[0]); 
    } 
    return $diff; 
}); 
print_r($array); 

這裏我們使用strcmp() function,其「回報< 0如果str1小於str2的;> 0如果str1大於str2 ,如果它們相等,則爲0「就像我們需要的那樣。

輸出:

Array 
(
    [0] => Array 
     (
      [0] => Alex 
      [1] => 38 
     ) 

    [1] => Array 
     (
      [0] => Ben 
      [1] => 38 
     ) 

    [2] => Array 
     (
      [0] => Peggy 
      [1] => 37 
     ) 

) 
+0

謝謝。有用。 我有一個大問題,因爲我的'年齡'是一個浮動var,我的排序結果是不正確的。我已經將它們轉換爲整數,現在沒問題。但我不得不一步一步不理解爲什麼你的例子實際上工作,爲什麼一旦插入我的代碼,它不是...... – MaitreWado

相關問題