2013-04-11 76 views
6

Điều tôi đang cố gắng sắp xếp là mảng đa chiều chứa giá trị thập phân. Từ những gì tôi đã thử nghiệm, nổi đang gặp khó khăn khi được đặt hàng đúng cách.Sắp xếp mảng đa chiều theo giá trị thập phân

Array 
(
    [0] => Array 
     (
      [company] => Ebay 
      [weight] => 4.6 
     ) 

    [1] => Array 
     (
      [company] => Ebay 
      [weight] => 1.7 
     ) 

    [2] => Array 
     (
      [company] => Ebay 
      [weight] => 3.7 
     ) 
) 


usort($array, 'order_by_weight'); 

// Sorts DESC highest first 
function order_by_weight($a, $b) { 
    return $b['weight'] - $a['weight']; 
} 

Cách tốt nhất để sắp xếp các số này giảm dần là gì?

+0

"phao nổi gặp khó khăn khi được sắp xếp đúng cách" --- không, không có gì, bạn đã nhầm lẫn điều gì đó. – zerkms

+0

@zerkms Tôi có thể đang đọc sai tài liệu, nhưng tôi không hiểu sai giá trị được đặt hàng không chính xác. http://php.net/manual/en/function.usort.php. Kiểm tra điều này, được nói trong các tài liệu php: "Chú ý Trả về các giá trị không nguyên từ hàm so sánh, chẳng hạn như phao, sẽ dẫn đến một phép nội bộ thành số nguyên của giá trị trả về của cuộc gọi lại. Vì vậy, các giá trị như 0,99 và 0,1 cả hai sẽ được đúc thành giá trị số nguyên là 0, sẽ so sánh các giá trị như nhau. " – stwhite

+0

Tôi đã lấy mã của bạn và nó chỉ hoạt động: http://ideone.com/cqW85m Bạn đã từng thử chạy nó chưa? – zerkms

Trả lời

16
$arr = array(
    array('company' => 'A', 'weight' => 4.6), 
    array('company' => 'B', 'weight' => 1.7), 
    array('company' => 'C', 'weight' => 3.7), 
); 

usort($arr, 'order_by_weight'); 

function order_by_weight($a, $b) { 
    return $b['weight'] > $a['weight'] ? 1 : -1; 
} 

var_dump($arr); 

PS: nó không phải là một khoa học tên lửa - điều này chính xác "lừa" được sử dụng như ví dụ đầu tiên tại http://php.net/usort

+0

Tôi thích nó, ngắn hơn nhiều so với array_multisort và đơn giản để đọc/sử dụng! – Benz

+0

@Benz: nó có thể còn ngắn hơn nếu chúng tôi sử dụng các chức năng ẩn danh – zerkms

+0

Hoàn toàn đúng, nhưng chúng tôi không biết phiên bản TS PHP, tôi không chắc chắn, nhưng tôi nghĩ rằng phiên bản PHP tối thiểu cho các chức năng ẩn danh là PHP 5.4 . – Benz

0

Bạn có thể sắp xếp mảng bằng array_multisort, độ cao, điều này thường được sử dụng để sắp xếp trên nhiều giá trị mảng thay vì một.

echo "<pre>"; 

$a = array(
    array('company' => 'ebay', 'weight' => 4.6), 
    array('company' => 'ebay', 'weight' => 1.7), 
    array('company' => 'ebay', 'weight' => 3.7), 
    array('company' => 'ebay', 'weight' => 2.7), 
    array('company' => 'ebay', 'weight' => 9.7), 
    array('company' => 'ebay', 'weight' => 0.7), 
); 

$company = array(); 
$weight = array(); 

foreach($a as $key=>$val) { 
    array_push($company, $val['company']); 
    array_push($weight, $val['weight']); 
} 

array_multisort($weight, SORT_ASC, $a); 

print_r($a); 
1

Bạn có thể làm điều này với chức năng ẩn danh chỉ trong một dòng

$arr = array(
    array('company' => 'A', 'weight' => 4.6), 
    array('company' => 'B', 'weight' => 1.7), 
    array('company' => 'C', 'weight' => 3.7), 
); 
usort($arr, function($a, $b) { return $b['weight'] > $a['weight'] ;}); 

print_r($arr); 

Hy vọng điều này sẽ giúp :)

0

Khi sắp xếp bản đồ ở đây là ví dụ hay hoặc chiều sắp xếp mảng đa mà không sử dụng bất kỳ chức năng php inbuilt hơn

$multiarr = array('0'=>array(
     "hashtag" => "a7e87329b5eab8578f4f1098a152d6f4", 
     "title" => "Flower", 
     "order" => 3), 

'1' => array(
     'hashtag' => "b24ce0cd392a5b0b8dedc66c25213594", 
     "title" => "Free", 
     "order" => 2), 
'2' => array('hashtag' => 'e7d31fc0602fb2ede144d18cdffd816b', 
     'title' => 'Ready', 
     'order' => 1 
    )); 

sắp xếp chức năng:

function multisort (&$array, $key) { 
$valsort=array(); 
$ret=array(); 
reset($array); 
foreach ($array as $ii => $va) { 
    $valsort[$ii]=$va[$key]; 
} 
asort($valsort); 
foreach ($valsort as $ii => $va) { 
    $ret[$ii]=$array[$ii]; 
} 
$array=$ret; 

}

multisort ($ multiarr, "đặt hàng") enter code here

: output:

Array 
(
[2] => Array 
    (
     [hashtag] => e7d31fc0602fb2ede144d18cdffd816b 
     [title] => Ready 
     [order] => 1 
    ) 

[1] => Array 
    (
     [hashtag] => b24ce0cd392a5b0b8dedc66c25213594 
     [title] => Free 
     [order] => 2 
    ) 

[0] => Array 
    (
     [hashtag] => a7e87329b5eab8578f4f1098a152d6f4 
     [title] => Flower 
     [order] => 3 
    ) 

)

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