2012-04-12 37 views
8

Như đã thấy in this other answer, có một số cách để lặp lại hai mảng cùng kích thước; tuy nhiên, tất cả các phương pháp đều có một lỗ hổng đáng kể. Dưới đây là một số cảnh báo với các phương pháp được đề xuất:PHP: Cách tốt nhất để lặp lại hai mảng song song?

  • Bạn không thể sử dụng giá trị FALSE trong một trong các mảng.
  • Bạn chỉ có thể sử dụng các giá trị vô hướng trong một trong các mảng.
  • Bạn phải sử dụng các mảng được lập chỉ mục bằng số.
  • Cả hai mảng phải chia sẻ cùng một khóa.
  • vv

Câu hỏi của tôi là - là có một phương pháp để làm điều này mà không bị bất kỳ trong số này (hoặc khác) hãy cẩn thận có ý nghĩa?

Hãy nhớ rằng tôi chỉ đơn giản là yêu cầu điều này từ sự tò mò; Tôi không có trường hợp sử dụng trong tâm trí, cũng không làm tôi thậm chí biết nếu một trường hợp như vậy thực sự tồn tại hoặc sẽ hữu ích/thực tế trong một kịch bản thế giới thực. Tuy nhiên, đây là một số ví dụ dữ liệu:

$arr1 = [ 'a' => 1, 'b' => FALSE, 'c' => new DateTime() ]; 
$arr2 = [ 'foo', TRUE, 7 ]; 
+0

Có gì sai với câu trả lời của beefsack cho câu hỏi đó? Có vẻ như nó sẽ hoạt động bất kể nội dung hay cấu trúc của các mảng. – nickb

+0

nó sẽ không hoạt động với vì ''b' => FALSE' @nickb – Baba

+0

@Baba - Không, [nó hoạt động với' 'b' => false'] (http://codepad.viper-7.com/nNZuNj). – nickb

Trả lời

21

Bạn có thể sử dụng một MultipleIterator:

$iterator = new MultipleIterator; 
$iterator->attachIterator(new ArrayIterator($array1)); 
$iterator->attachIterator(new ArrayIterator($array2)); 

foreach ($iterator as $values) { 
    var_dump($values[0], $values[1]); 
} 

Bạn có thể tìm thêm ví dụ về các tùy chọn khác nhau in the docs.

+0

Vì vậy, sạch sẽ. +1 :) – AlienWebguy

+0

+1 Tôi biết phải có một phương pháp tốt hơn. Cảm ơn bạn đã dạy tôi điều gì đó :-) – FtDRbwLXw6

1
<?php 

$arr1 = array('a' => 1, 'b' => FALSE, 'c' => new DateTime()); 
$arr2 = array('foo', TRUE, 7, 5); 


reset($arr1); 
reset($arr2);  

while ((list($key, $val) = each($arr1)) 
    && (list($key2, $val2) = each($arr2)) 
) { 
    var_dump($val,$val2); 
    // or whatever you wanted to do with them 
} 

http://www.php.net/manual/en/function.each.php

+1

tập lệnh của bạn có lỗi và sẽ không hoạt động nếu tổng số mảng trong '$ arr2'>' $ arr1' ... sửa nó trước khi chúng bắt đầu bỏ phiếu bạn xuống – Baba

+0

@Baba Tôi đã tìm một máy chủ để kiểm tra, bởi vì tôi đã không thực sự kiểm tra nó lần đầu tiên. Nó không phải là một vấn đề với độ dài của mảng (từ những gì tôi có thể nói), nhưng có vấn đề (như tôi không có 5,4 trên máy chủ tôi thử nghiệm trên), vì vậy cảm ơn cho chỉ ra rằng. – craniumonempty

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