2010-08-28 34 views
7

Tôi có một mảng có thể có giá trị nhân bảnLoại bỏ tất cả các trường hợp của các mục từ mảng

$array1 = [value19, value16, value17, value16, value16] 

Tôi đang tìm kiếm một chức năng PHP ít hiệu quả mà có thể chấp nhận hoặc một mảng hoặc một chuỗi (tùy theo cái nào làm cho nó dễ dàng hơn)

$array2 = ["value1", "value16", "value17"]; 
or 
$string2 = "value1 value16 value17"; 

và xóa từng mục trong mảng 2 hoặc chuỗi 2 khỏi mảng1.

Sản lượng phù hợp với ví dụ này sẽ là:

$array1 = [value19] 

Đối với những người có kinh nghiệm hơn với PHP, là một cái gì đó như thế này có sẵn trong PHP?

Trả lời

10

bạn đang tìm kiếm array_diff

$array1 = array('19','16','17','16','16'); 
$array2 = array('1','16','17'); 
print_r(array_diff($array1,$array2)); 

Array ([0] => 19)

+0

Tôi nghĩ vấn đề với array_diff là nếu một giá trị từ mảng2 không tồn tại trong mảng 1, nó sẽ thực sự được thêm vào, bởi vì nó làm một sự khác biệt. Trong mảng ở trên ví dụ, array2 bao gồm value1, nhưng array1 thậm chí không có giá trị 1, do đó, nó không thể được loại bỏ vì nó thậm chí không tồn tại. – Lingo

+0

bạn bị nhầm lẫn, mảng_diff không thêm bất cứ điều gì. thử nó đi. – Galen

0

Đối với phiên bản chuỗi để làm việc, sử dụng phát nổ. Như thế này:

function arraySubtract($one, $two) { 
    // If string => convert to array 
    $two = (is_string($two))? explode(' ',$two) : $two; 
    $res = array(); 
    foreach (array_diff($one, $two) as $key => $val) { 
     array_push($res, $val); 
    } 

    return $res; 
} 

này allso trả về một mảng với key = 0 .... n không có khoảng trống

thử nghiệm với điều này:

echo '<pre>'; 
print_r(arraySubtract(array(1,2,3,4,5,6,7), array(1,3,7))); 
print_r(arraySubtract(array(1,2,3,4,5,6,7), "1 3 7")); 
print_r(arraySubtract(array("val1","val2","val3","val4","val5","val6"), array("val1","val3","val6"))); 
print_r(arraySubtract(array("val1","val2","val3","val4","val5","val6"), "val1 val3 val6")); 
echo '</pre>'; 
Các vấn đề liên quan