2012-10-04 15 views
7

Directo al grano ...matriz unsetting teclas

tengo una matriz ($is_anonymous_ary) que tiene este aspecto:

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

Y otra matriz ($user_id_ary) como ésta:

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

Necesito desarmar valores en el $user_id_ary basados ​​en la primera matriz. Entonces, si el valor de $is_anonymous_ary es 1 (verdadero), tome la clave de esa matriz, verifique contra $user_id_ary, y desarme las claves de $user_id_ary que tenían el valor de las claves de $is_anonymous_ary.

que complica la descripción un poco, aquí es cómo necesito mi resultado final:

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

Como se puede ver todas las claves de la $is_anonymous_ary que tenía un valor TRUE, han desaparecido en la segunda matriz. que tenía las claves de la primera matriz como valores en la segunda matriz.

Espero haber sido claro.

+0

¿No se puede hacer esto con una simple intersección basada en bucle para eliminar en base a '===' 1? – Sammaye

+1

No lo sé, de ahí esta pregunta. – Aborted

Respuesta

6

Trate 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

¡Genial! SO tiene verdaderos expertos. – Dev

+0

¿Por qué regresar? ¡No estoy trabajando dentro de una función! ¿Puedes explicar lo que hace tu código? – Aborted

+0

@Dugi ¿Has consultado el manual? El elemento que hace que la devolución de llamada devuelva falso se eliminará. – xdazz

0

¿Qué tan fácil :)

$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

Necesito seguir trabajando con $ user_id_ary como el nombre de la variable, ya que se usa en más lugares que una vez. ¿Alguna sugerencia que no elimine mi $ user_id_ary actual? – Aborted

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

si esto no funcionará, tratar de recorrer a través de cada elem en user_id_array

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