2010-04-24 59 views
5

Đã bị mắc kẹt trong trường hợp này một thời gian, vì vậy mọi trợ giúp sẽ được đánh giá cao. Tôi có một mảng (bên trái) có chứa một danh sách các phần tử, mục đích là để sắp xếp một mảng khác (phải) với các giá trị từ mảng bên trái.Thay đổi thứ tự chỉ mục trong mảng

Mảng trái

Array 
(
    [0] => ID 
    [1] => FirstName 
    [2] => LastName 
    [3] => Address 
) 

Mảng đúng

Array 
(
    [0] => Array 
    (
     [FirstName] => Pim 
     [Address] => Finland 
     [LastName] => Svensson 
     [ID] => 3 
    ) 
    [1] => Array 
    (
     [FirstName] => Emil 
     [Address] => Sweden 
     [LastName] => Malm 
     [ID] => 5 
    ) 
) 

Những gì tôi đang cố gắng để hoàn thành sẽ tương tự

Array 
(
    [0] => Array 
    (
     [ID] => 3 
     [FirstName] => Pim 
     [LastName] => Svensson 
     [Address] => Finland 
    ) 

Bất cứ ai này? :) Ồ, tôi đang chạy php 5.3, nếu nó giúp!

Trả lời

7
$output = array(); 
foreach ($right as $array) { 
    foreach ($left as $field) { 
     $temp[$field] = $array[$field]; 
    } 
    $output[] = $temp; 
} 
+0

+1 để đơn giản, rõ ràng, hiệu quả. – goat

+0

Tuyệt vời, nó đã làm các trick! –

2

Bạn phải nổ mảng Store mảng trong một biến như thế này

$array = Array 
(
    [0] => Array 
    (
     [ID] => 3 
     [FirstName] => Pim 
     [LastName] => Svensson 
     [Address] => Finland 
    ); 

và sau đó phát nổ mảng sau khi bùng nổ các mảng bạn sẽ nhận được các thông số của mảng tách sau đó bạn có thể sử dụng hàm implode sắp xếp chúng theo thứ tự bất kỳ như bạn muốn

+0

bạn đã nhận được kết quả – udaya

0

Tôi sẽ lùi lại một bước và nhìn vào những gì bạn thực sự cần làm. Mảng là kết hợp, vì vậy bạn có thể truy cập đúng phần tử ngay lập tức, đúng không? Vì vậy, bạn không thực sự cần nó để được theo thứ tự, trừ khi bạn in đầu ra với foreach.

tôi muốn đề nghị một trong những giải pháp sau:

  1. Nếu bạn cần "quyền" mảng được trong key-trật tự, sau đó nhìn vào truy vấn cơ sở dữ liệu/tương tự và chọn các cột trong thứ tự bạn cần chúng.
  2. Foreach người bạn muốn in, tra cứu thứ tự trong mảng "bên trái", sau đó in giá trị tương ứng của khóa đó trong mảng "bên phải".
+0

Tôi không chọn bất cứ thứ gì từ một db, tôi nhận được mảng từ một xml được nạp với simplexml! –

0

Vâng, câu hỏi của bạn không phổ biến, thường là mảng kết hợp được sử dụng để giải quyết mọi vấn đề về "vị trí". Dù sao, có rất nhiều cách để làm những gì bạn đang tìm kiếm những gì bạn đang tìm kiếm.

Bạn có thể sử dụng danh sách() nhưng vị trí của nó dựa trên:

foreach($oldArray as $o) 
{ 
    list($firstName,$lastName,$address,$id)=$oldArray; 
    $newArray[]=array($id,$firstName,$lastName,$address); 
} 

Nhưng cách tốt nhất để giải quyết vấn đề của bạn đó là điền vào mảng trực tiếp theo thứ tự đúng thay vì tái loại sau :)

+0

Cảm ơn! Tôi thứ hai, nhưng tôi nhận được thông tin trong xml từ một dịch vụ khác, theo cách này tôi không thể luôn đảm bảo thứ tự của dữ liệu. Vì vậy, nhiệm vụ kỳ lạ này! :) –

3

Bạn có thể sử dụng uksort() cho phép bạn sắp xếp các khóa mảng theo hàm do người dùng xác định. Ví dụ:

function sort_by_array($array) { 
    // create a sorting function based on the order of the elements in the array 
    $sorter = function($a, $b) use ($array) { 
     // if key is not found in array that specifies the order, it is always smaller 
     if(!isset($array[$a])) return -1; 
     if($array[$a] > $array[$b]) { 
      return 1; 
     } 
     return ($array[$a] == $array[$b]) ? 0 : -1; 
    }; 
    return $sorter; 
} 
// $array contains the records to sort 
// $sort_array is the array that specifies the order 
foreach($array as &$record) { 
    uksort($record, sort_by_array(array_flip($sort_array))); 
} 

Tôi tận dụng khả năng trong 5.3 để xác định chức năng động và tôi sử dụng array_flip() chuyển:

Array 
(
    [0] => ID 
    [1] => FirstName 
    [2] => LastName 
    [3] => Address 
) 

để

Array 
(
    [ID] => 0 
    [FirstName] => 1 
    [LastName] => 2 
    [Address] => 3 
) 

này làm cho nó dễ dàng hơn để so sánh các phím sau.

+2

1+ để linh hoạt, nhưng tôi nghĩ nó quá phức tạp đối với trường hợp cụ thể này. – goat

+0

@chris: Vâng, trong trường hợp này, tùy thuộc vào những gì OP thực sự muốn làm với mảng, nó có thể phức tạp. Nhưng tôi tự hỏi tại sao không ai đề cập đến phương pháp này và tôi muốn chứng minh rằng điều đó là có thể. –

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