2008-10-22 25 views
12

Làm cách nào khác bạn có thể so sánh hai mảng ($ A và $ B) và giảm các phần tử phù hợp ra khỏi đầu tiên để chuẩn bị cho vòng lặp tiếp theo trên mảng $ A?Làm thế nào để so sánh hai mảng và loại bỏ các phần tử phù hợp từ một cho vòng lặp tiếp theo?

$A = array(1,2,3,4,5,6,7,8); 
$B = array(1,2,3,4); 

$C = array_intersect($A,$B); //equals (1,2,3,4) 
$A = array_diff($A,$B);  //equals (5,6,7,8) 

Đây có phải là cách đơn giản nhất hoặc có cách nào để sử dụng chức năng khác mà tôi chưa từng nghĩ đến? Mục tiêu của tôi là có một mảng mà tôi có thể lặp lại, rút ​​ra các nhóm nội dung liên quan (tôi đã định nghĩa các mối quan hệ đó ở nơi khác) cho đến khi mảng trả về false.

+0

này Nó có thể là tôi, nhưng tôi không nghĩ rằng câu hỏi là rất rõ ràng. Khi tôi đọc nó, bạn chỉ quan tâm đến mảng_diff ($ A, $ B) (có vẻ khá đơn giản). Hay là tính toán $ C cũng cần thiết? (Nếu vậy, bạn có thể sử dụng mảng_diff ($ A, $ C) thay vì mảng_diff ($ A, $ B).) – mweerden

+0

Không, tôi tuyên bố $ C là giao điểm của $ A và $ B – kevtrout

Trả lời

11

Bạn đã hiểu. Chỉ cần sử dụng array_diff hoặc array_intersect. Không dễ dàng hơn thế.

Edit: Ví dụ:

$arr_1 = array_diff($arr_1, $arr_2); 
$arr_2 = array_diff($arr_2, $arr_1); 

Source

+2

Đồng thời xem xét [array_diff_assoc ] (http://www.php.net/manual/en/function.array-diff-assoc.php) nếu thứ tự của các giá trị trong hai mảng là quan trọng. – Duncanmoo

2

Xem thêm array_unique. Nếu bạn nối hai mảng, sau đó nó sẽ yank tất cả các bản sao.

0

Hey, giải pháp tốt hơn: array _ uintersect. Điều này cho phép bạn so sánh các mảng theo mảng_intersect nhưng sau đó nó cho phép bạn so sánh dữ liệu với hàm gọi lại.

0

Cố gắng

$a = array(0=>'a',1=>'x',2=>'c',3=>'y',4=>'w'); 
$b = array(1=>'a',6=>'b',2=>'y',3=>'z'); 
$c = array_intersect($a, $b); 

$result = array_diff($a, $c); 
print_r($result); 
2

Thưa dễ dàng và sạch sẽ cách

$clean1 = array_diff($array1, $array2); 
$clean2 = array_diff($array2, $array1); 
$final_output = array_merge($clean1, $clean2); 
+0

Câu trả lời này là tốt hơn, vì nó sắp xếp lại các phần tử mảng trên các chỉ mục phù hợp. Không giống như câu trả lời của stuart, điều này sẽ loại bỏ các phần tử khỏi các chỉ mục phù hợp. Vì vậy, nếu có một yếu tố phù hợp ở chỉ số 1, bạn cố gắng truy cập vào chỉ mục 1 trong mảng kết quả, nó sẽ ném lỗi. – Ajji

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