2010-04-20 68 views
14

Tôi có một mảng gồm các mảng. Tôi muốn sắp xếp mảng cha bởi một thuộc tính của mảng con. Dưới đây là một ví dụSắp xếp một mảng theo giá trị của mảng con trong 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) 
} 

Tôi muốn sắp xếp các mảng mẹ bởi [2] tăng dần trong mảng con, vì vậy trong trường hợp này kết quả sẽ là mảng con đảo ngược (0,05, 08). Điều này có thể sử dụng bất kỳ chức năng sắp xếp PHP nào không?

Trả lời

24

Bạn có thể tận dụng usort chức năng như:

$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

Ví dụ # 2 trên trang đó rất giống với những gì bạn đang cố gắng làm, hãy xem xét điều đó. –

+0

Đã cập nhật câu trả lời của tôi với chính xác những gì bạn muốn. – codaddict

+0

Wow, câu trả lời vô cùng hữu ích. Cảm ơn bạn. – Evan

-2

xem trang này để dụ

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

hoặc ví dụ

 <?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

Đây là một số mã rất đáng sợ - tôi rất khuyên bạn không nên sử dụng nó. Sử dụng 'usort()' như được khuyến nghị. –

+0

chức năng hey usort() đã được cung cấp. Vì vậy, chỉ có tôi cung cấp giải pháp thay thế mà tôi cung cấp ví dụ từ hướng dẫn sử dụng. – Karthik

4

Đối với cơ sở dữ liệu như mô hình sử dụng array_multisort như đã thấy trong ví dụ # 3.

Ví dụ:

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

nơi $data là mảng dữ liệu của bạn và basis là yếu tố được sử dụng để phân loại.

+0

Tuyệt vời! Cám ơn vì đã chia sẻ. – BarryMode

Các vấn đề liên quan