2012-10-04 25 views
7

...:Dizi unsetting tuşları Düz ​​noktaya

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

Ve başka dizi ($user_id_ary) bu gibi:

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

İlk diziye göre $user_id_ary değerlerini kaldırmam gerekiyor. Yani, $is_anonymous_ary değeri 1 (true) ise, o zaman bu dizinden anahtarı alın, $user_id_ary karşı denetleyin vearasındaki anahtarların değeri olan $user_id_ary anahtarlarını kaldırın.

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

Bir TRUE değeri vardı $is_anonymous_ary gelen tüm anahtarları Gördüğünüz gibi

, ikinci dizideki gitti:

Burada benim nihai sonucu nasıl ihtiyaç olduğunu description biraz karmaşık. İlk diziden anahtarları ikinci dizide değerler olarak aldı. Umarım kendimi açıkça ifade ederdim.

+0

Bu, '===' 1 temel alınarak kaldırmak için basit bir döngü tabanlı kesiştirilemez mi? – Sammaye

+1

Bilmiyorum, dolayısıyla bu soru. – Aborted

cevap

6

array_filter deneyin:

$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

Harika! SO gerçek uzmanları var. – Dev

+0

Neden geri dönüyor? Bir fonksiyonun içinde çalışmıyorum! Kodunuzun ne yaptığını açıklayabilir misiniz? – Aborted

+0

@Dugi El kitabını kontrol ettiniz mi? Öğe geri arama dönüş yanlış yapmak kaldırır. – xdazz

0

ne kadar kolay :)

$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

Değişken adı olarak $ user_id_ary ile çalışmaya devam etmem gerekiyor çünkü bir kereden fazla yerde kullanılıyor. Mevcut $ user_id_ary'mden kurtulmayan herhangi bir öneriniz var mı? – Aborted

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

bu alışkanlık eser user_id_array her elem aracılığıyla yineleme çalışırsanız

0
$user_id_ary = array_diff($user_id_ary, array_keys(array_filter($is_anonymous_ary)));