2010-04-20 209 views
14

我有一個由數組組成的數組。我想通過子數組的屬性對父數組進行排序。下面是一個例子按PHP中子數組的值對數組進行排序

array(2) { 
    [0]=> 
    array(3) { 
    [0]=> 
    string(6) "105945" 
    [1]=> 
    string(10) "First name" 
    [2]=> 
    float(0.080878465391) 
    } 
    [1]=> 
    array(3) { 
    [0]=> 
    string(6) "109145" 
    [1]=> 
    string(11) "Second name" 
    [2]=> 
    float(0.0504154818384) 
} 

我想在子陣列由[2]上升父數組進行排序,所以在這種情況下,結果將是相反的子陣列(0.05,08)。這可能使用任何衆多的PHP排序功能?

回答

24

您可以使用usort功能爲:

$arr = array(
       array("105945","First name",0.080878465391), 
       array("109145","Second name",0.0504154818384) 
      ); 

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

usort($arr,"cmp"); 
+0

該頁面上的示例#2與您正在嘗試執行的操作非常相似,請查看該示例。 – 2010-04-20 06:09:07

+0

已更新我的答案,正是你想要的。 – codaddict 2010-04-20 06:14:28

+0

哇,非常有幫助的答案。謝謝。 – Evan 2010-04-20 06:17:08

-2

看到這個頁面,例如

http://php.net/manual/en/function.sort.php 

或例如

 <?php 
function multisort($array, $sort_by) { 
    foreach ($array as $key => $value) { 
     $evalstring = ''; 
     foreach ($sort_by as $sort_field) { 
      $tmp[$sort_field][$key] = $value[$sort_field]; 
      $evalstring .= '$tmp[\'' . $sort_field . '\'], '; 
     } 
    } 
    $evalstring .= '$array'; 
    $evalstring = 'array_multisort(' . $evalstring . ');'; 
    eval($evalstring); 

    return $array; 
} 

$test = array(
    array('a' => '1', 'b' => '3'), 
    array('a' => '2', 'b' => '1'), 
    array('a' => '1', 'b' => '1')); 

echo 'Unsorted: '; 
print_r($test); 

$result = multisort($test , array('a','b')); 

echo 'Sorted: '; 
print_r($result); 
?> 

Result: 

Unsorted: Array 
(
    [0] => Array 
     (
      [a] => 1 
      [b] => 3 
     ) 

    [1] => Array 
     (
      [a] => 2 
      [b] => 1 
     ) 

    [2] => Array 
     (
      [a] => 1 
      [b] => 1 
     ) 

) 
Sorted: Array 
(
    [0] => Array 
     (
      [a] => 1 
      [b] => 1 
     ) 

    [1] => Array 
     (
      [a] => 1 
      [b] => 3 
     ) 

    [2] => Array 
     (
      [a] => 2 
      [b] => 1 
     ) 

) 
+1

這是一些非常可怕的代碼 - 我強烈建議你不要使用它。按照建議使用'usort()'。 – 2010-04-20 06:12:50

+0

hey usort()函數已經提供。所以只有我提供了另一種解決方案,我提供了手冊中的示例。 – Karthik 2010-04-20 06:40:09

4

對於數據庫狀花紋使用array_multisort在看到例#3。

例如:

$sort = array(); 
foreach ($data as $key => $row) { 
    $sort[$key] = $row['basis']; 
} 
array_multisort($sort, SORT_ASC, $data); 

其中$data是您的數據陣列和basis是用於排序的元素。

+0

太棒了!感謝分享。 – BarryMode 2017-01-25 18:33:14