2012-10-04 23 views
7

thẳng vào điểm ...unset Mảng phím

Tôi có một mảng ($is_anonymous_ary) trông như thế này:

array (
    [80] => 1 
    [57] => 1 
    [66] => 
    [60] => 
    [90] => 1 
) 

Và một mảng ($user_id_ary) như thế này:

array (
    [0] => 80 
    [1] => 30 
    [2] => 57 
    [3] => 89 
    [4] => 66 
    [5] => 60 
    [6] => 90 
) 

Tôi cần bỏ đặt giá trị trên $user_id_ary dựa trên mảng đầu tiên. Vì vậy, nếu giá trị từ $is_anonymous_ary là 1 (đúng), hãy lấy khóa từ mảng đó, kiểm tra lại $user_id_ary và bỏ đặt khóa từ $user_id_ary có giá trị từ các khóa từ $is_anonymous_ary.

tôi phức tạp mô tả một chút, đây là cách tôi cần kết quả cuối cùng của tôi:

user_id_ary = array(
    [0] => 30 
    [1] => 89 
    [2] => 66 
    [3] => 60 
) 

Như bạn thấy tất cả các phím từ $is_anonymous_ary rằng đã có một giá trị TRUE, đã mất hết trong mảng thứ hai. có các khóa từ mảng đầu tiên làm các giá trị trong mảng thứ hai.

Hy vọng tôi đã tự làm rõ.

+0

Không thể thực hiện điều này với một giao điểm dựa trên vòng lặp đơn giản để loại bỏ dựa trên '===' 1? – Sammaye

+1

Tôi không biết, do đó câu hỏi này. – Aborted

Trả lời

6

Hãy thử array_filter:

$user_id_ary = array_filter($user_id_ary, function($var) use ($is_anonymous_ary) { 
    return !(isset($is_anonymous_ary[$var]) && $is_anonymous_ary[$var] === 1); 
}); 
+0

Tuyệt vời! SO có các chuyên gia thực sự. – Dev

+0

Tại sao phải trả lại? Tôi không làm việc bên trong một chức năng! Bạn có thể giải thích mã của bạn không? – Aborted

+0

@Dugi Bạn đã kiểm tra sổ tay chưa? Phần tử làm cho returnback return false sẽ bị loại bỏ. – xdazz

0

Làm thế nào dễ dàng :)

$new_array =NULL; 
foreach($is_anonymous_ary as $key=>$value){ 

    $new_array[] = array_search($key, $user_id_ary); 
    unset($is_anonymous_ary[$key]); 
} 
$user_id_ary = $new_array; 
+0

Tôi cần tiếp tục làm việc với $ user_id_ary làm tên biến vì nó được sử dụng ở nhiều nơi hơn một lần. Bất kỳ đề xuất nào không loại bỏ $ user_id_ary hiện tại của tôi? – Aborted

0
foreach($user_id_ary as $id){ 
    if($is_anonymous_ary[$id] == '1'){ 
     unset($d); 
    }  
} 

nếu công việc này wont, cố gắng lặp qua mỗi elem trong user_id_array

0
$user_id_ary = array_diff($user_id_ary, array_keys(array_filter($is_anonymous_ary))); 
Các vấn đề liên quan