2010-03-30 4 views
4

Je ne sais pas pourquoi cela se passe, mais mon script ne semble pas être en mesure de retourner vrai pour in_array plus d'une fois ...php in_array - un comportement inattendu

$saved = '15,22';  
$set = explode(",",$saved); //results in Array ([0] => 15 [1] => 22) 

Ensuite, j'interroger la base:

$result = pg_query("SELECT did,vid,iid,value FROM demographicValues"); 
if(pg_num_rows($result) > 0) { 
    while($r = pg_fetch_array($result)) { 
    $demo[$r['did']][$r['vid']]['value'] = $r['value']; 
    if(in_array($r['vid'], $set)) { 
     $demo[$r['did']][$r['vid']]['status'] = 1; 
    } 
    } 
} else... 

Si je print_r $ démo, vous pouvez voir que la vid 22 est là, donc, je ne comprends pas pourquoi la situation n'est pas réglé en conséquence?

Array 
    (
     [Mant] => Array 
      (
       [15] => Array 
        (
         [value] => Proper 
         [checked] => 1 
        ) 

       [16] => Array 
        (
         [value] => Parish 
        ) 
     [Comp] => Array 
      (
       [22] => Array 
        (
         [value] => 65 - 70 
        ) 

       [23] => Array 
        (
         [value] => 35 - 50 
        ) 
     ) 

) 

Notez que j'ai aussi essayé array_intersect et array_flip sur le plateau de $, alors isset ...

+1

Il peut y avoir des espaces ou d'autres caractères invisibles qui gâchent le code. Pouvez-vous utiliser 'var_dump' plutôt que' print_r'? Il va mettre des guillemets autour des chaînes et nous dire le nombre de variables. –

+2

si vous ajoutez 'var_dump ($ r ['vid'], $ set)' juste avant la ligne 'in_array' - que dit-elle? – user187291

+1

Merci beaucoup ... Oui, l'ensemble $ a eu des espaces inutiles, et l'utilisation de la garniture a permis de travailler ... Merci! – n00b0101

Répondre

2

Par défaut in_array vérifie également les types. Voir le paramètre strict au http://php.net/manual/en/function.in-array.php.

Dans votre code $r['vid'] est un nombre entier et la chaîne éclatée est toujours une chaîne. Il suffit donc d'utiliser les mêmes types ou d'utiliser:

if(in_array($r['vid'], $set, false)) ... 
+0

par défaut php ne _not_ vérifier les types – knittl

+1

désolé j'ai mal lu quelque chose – Kru