2013-02-26 52 views
5

kết hợp Tôi có một mảng:tái sắp xếp php mảng

$example = array(); 

$example ['one'] = array('first' => 'blue', 
          'second' => 'red'); 

$example ['two'] = array('third' => 'purple', 
          'fourth' => 'green'); 

$example ['three'] = array('fifth' => 'orange', 
          'sixth' => 'white'); 

Dựa trên một số đầu vào của hàm, tôi cần phải thay đổi thứ tự của các mảng ví dụ trước khi vòng lặp foreach xử lý đầu ra của tôi:

switch($type) 

case 'a': 
//arrange the example array as one, two three 
break; 

case 'b': 
//arrange the example array as two, one, three 
break; 

case 'c': 
//arrange the example array in some other arbitrary manner 
break; 

foreach($example as $value){ 
     echo $value; 
} 

Có cách nào dễ dàng để thực hiện việc này mà không cần phải tái kỹ thuật tất cả mã của tôi không? Tôi có một vòng lặp forep khá độc đáo mà không xử lý và nếu có một cách dễ dàng để đơn giản sắp xếp lại mảng mỗi lần đó sẽ thực sự hữu ích.

+2

Mục đích của việc phân loại mảng tùy ý của bạn là gì? Bạn chỉ đơn giản là cố gắng để ngẫu nhiên hóa thứ tự? Hay, bạn đặc biệt muốn thay đổi các vật phẩm xung quanh theo kiểu tham số? – user1477388

+0

Tôi đoán vấn đề là tôi cần sắp xếp chúng theo cách tôi muốn và không rơi vào bất kỳ tiêu chí sắp xếp sẵn có nào như chữ cái hoặc chữ số ... Tôi cần nó được sắp xếp chính xác cách tôi sắp xếp nó. – absentx

Trả lời

2

Bạn có thể sử dụng array_multisort cho hoán vị của bạn . Tôi cho rằng bạn biết hoán vị và không cần lấy nó từ các tên chính. Này, bạn muốn trình tự two, three, one, sau đó tạo ra một mảng tài liệu tham khảo như thế:

$permutation = array(3, 1, 2); 

Ý nghĩa: mục đầu tiên đi vào vị trí 3, mục thứ hai đến vị trí 1, mục thứ ba để xác định vị trí 2

sau đó, sau khi switch, hoán:

array_multisort($permutation, $example); 

này sẽ sắp xếp các mảng $permutation và áp dụng theo thứ tự để $example.

+0

vì tôi không sử dụng phím số sẽ mảng hoán vị hoạt động? Điều này dường như là con đường để tôi đi bởi vì bạn hoàn toàn đúng trong đó tôi biết hoán vị tôi muốn cho từng tình huống. – absentx

+0

Nó không có gì để làm với các phím và array_multisort bảo tồn các phím số không, vì vậy: có, nó sẽ làm việc –

+0

Yep đây là cách để làm điều đó, cảm ơn một lần nữa.Mất một chút để quấn đầu của tôi xung quanh hoán vị (không phải sử dụng chúng trong một thời gian) nhưng cuối cùng đây là phương pháp đơn giản nhất cho tôi biết thứ tự của từng trường hợp. – absentx

0

Bạn cần phải viết chức năng sắp xếp tùy chỉnh cho từng trường hợp và sau đó sử dụng . Trường hợp đầu tiên chỉ có thể sử dụng sắp xếp. Các loại tùy ý cần phải được logic bạn xác định.

2

Bạn sẽ không tìm thấy câu trả lời bằng dấu đầu dòng ở đây. Bạn có thể sẽ cần phải viết chức năng của riêng bạn để sử dụng với uksort().

uksort($example, function ($a, $b) use $type { 
    switch($type) { 
     case 'a': 
      if ($a === 'one' || $b === 'three') return 1; 
      if ($a === 'three' || $b === 'one') return -1; 
      if ($a === 'two' && $b === 'three') return 1; 
      return -1; 
      break; 
     // and so on... 
    } 
}); 
0

Tôi thấy nhiều cách khác để giải quyết vấn đề này, nhưng không biết nhiều hơn về tôi không biết điều gì tốt hơn.

  1. Đặt trước điểm số (tạo giá trị số cho mỗi phần tử, được tính theo "vòng lặp foreach khá sâu"), sau đó sắp xếp mảng theo tiêu chí chính và duy nhất.

  2. Nếu tiêu chí của bạn s dựa trên chỉ số lĩnh vực, ASC/DESC sử dụng http://php.net/manual/en/function.array-multisort.php

  3. làm cho chức năng sắp xếp tùy chỉnh cho từng trường hợp (http://www.php.net/manual/en/function.usort.php)

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