2010-08-12 5 views
0

Salut Là, je suis en cours d'exécution de ce code, actuellementarray_key_exists dans un foreach

<?php foreach($search_results as $rslt) : ?> 
    <? 
    $code = $rslt['code']; 
    if(array_key_exists($code, $short_list)) { 
     $set = "set"; 
    } 
    ?> 
    <div class="row <? echo $set;?>"></div> 

Ce que je suis en train de réaliser est que si le tableau est égal au $rslt['code'] puis donner la div la classe de définir autrement, ne pas la le tableau que je vérifie contre ressemble à ceci,

Array 
(
    [849650047] => Y 
    [849652539] => Y 
    [849652774] => Y 
    [849656557] => Y 
    [849652014] => Y 
) 

Cependant chaque fois que je boucle toutes mes divs sont définies avec la classe 'set'? Il ne doit être où le array_key est égal à la $code

+0

Si vous souhaitez utiliser des balises courtes, ''. Votre dernière ligne pourrait être '

'. – meagar

+0

Je ne supporte pas la notation par étiquette courte. Je préfère de loin le 'over' '... – ircmaxell

Répondre

4

courant Eh bien, ils sont tous ensemble, parce que vous n'êtes jamais initialiser la variable $set:

<?php foreach($search_results as $rslt) : ?> 
    <? 
    $set = ''; 
    $code = $rslt['code']; 
    if(array_key_exists($code, $short_list)) { 
     $set = "set"; 
    } 
    ?> 
    <div class="row <? echo $set;?>"></div> 

En outre, il suffit d'utiliser isset() au lieu de array_key_exists (il est plus efficace et moins verbeux):

if(isset($short_list[$code])) { 
     $set = "set"; 
    } 
+0

ne s'initialise jamais, il ne réinitialise pas la valeur de $ set lors de l'itération sur le membre suivant – KoolKabin

+0

Eh bien, il ne l'initialise jamais non plus. Ce qui au mieux jettera un avis, ou au pire vous ouvrira à une attaque register_globals. TOUJOURS initialiser toutes les variables. Surtout si vous les mettez en conditionnel, et en les utilisant en dehors du conditionnel ... – ircmaxell

0

ajouter juste unset($set); à la fin de la boucle. Ou vous pouvez faire quelque chose comme ...

<?php foreach($search_results as $rslt) : ?> 
    <div class="row <? print array_key_exists($rslt['code'], $short_list)? 'set':''; ?>"></div> 
<?php endforeach; ?> 
0

Évitez la syntaxe alternative de structure de contrôle en PHP. C'est moche et rend votre code plus difficile à maintenir à long terme. Essayez également d'éviter un changement de contexte excessif avec <?php ?>; cela rend votre logique inutilement difficile à suivre.

<?php 

foreach ($search_results as $result) { 
    $set = isset($short_list[$result['code']]) ? ' set' : ''; 
    echo "<div class=\"row$set\"></div>"; 
} 

Notez que isset() renvoie false si la clé existe dans le tableau, mais sa valeur est nulle. Quelque chose à surveiller si vous voulez appliquer la classe "set" même si la valeur de $short_list[$result['code']] est nulle.