2010-10-19 4 views
0

ceci est une version légèrement modifiée du code dans la documentation PHP:Comment puis-je collecter les clés de toutes les valeurs vraies dans un tableau?

http://php.net/manual/en/function.next.php

<?php 

$array = array(
    -1 => true, 
    0 => false, 
    1 => true 
); 

while ($bet = current($array)) { 
    if ($bet == true) { 
     echo key($array) . '<br />'; 
    } 
    next($array); 
} 
?> 

C'est aussi proche que je pouvais arriver à ce que je voulais.

Ceci fait écho à "-1", et je comprends pourquoi. Ce que je veux savoir, c'est comment modifier ce code afin qu'il continue de chercher des valeurs "vraies" même après avoir rencontré un faux (et pas seulement pour un tableau de 3 valeurs).

Je réalise que ce n'est peut-être pas la meilleure façon de le faire et je suis ouvert aux suggestions.

Merci d'avance !!

Trufa

Répondre

4
echo join("<br>", array_keys(array_filter($array))); 

array_filter renvoie les vraies valeurs Lorsque vous ne fournissez pas une méthode de rappel, array_keys vous donne les clés pour ces valeurs, puis vous le préparez pour sortie utilisant join

+1

Et pour expliquer: array_filter() sans deuxième argument va supprimer tous les éléments du tableau dont la valeur évalue à false. (il supprimera également 0-s par exemple). –

+0

A travaillé comme un charme !! Merci beaucoup! – Trufa

+0

@Anti Veeranna bonne clarification, merci !! – Trufa

1

Vous pouvez parcourir l'ensemble du réseau:

foreach ($bet as $key => $value) { 
    if ($value == true) echo $key . "<br/>"; 
} 

modifier: pas .. hmm .. une autre méthode:

while (list($key,$value) = each($bet)) { 
    if ($value) echo $key . "<BR/>"; 
} 
+0

Je ne peux pas le faire fonctionner? – Trufa

0

La construction while($bet = current($array)) continuera uniquement à boucler tant que l'élément de tableau actuel est évalué à true. En général, les boucles while impliquent que vous êtes en boucle jusqu'à ce que certaines conditions soient remplies.

Si vous souhaitez effectuer une action sur tous les éléments d'un tableau, vous devez utiliser une boucle for ou foreach, qui plus indiquer clairement votre intention de itérer sur l'ensemble du réseau:

for($i = 0; $i < count($array); ++$i) { 

} 

foreach ($array as $key => $value) { 

} 
1

Vous pouvez utiliser une combinaison de array_filter et array_keys:

$array = array(
    -1 => true, 
    0 => false, 
    1 => true 
); 

$keys = array_keys(array_filter($array)); 
echo join("<br />", $keys); 

Voir en action à http://www.ideone.com/AREmK.

array_keys renvoie un tableau contenant les clés du tableau donné. array_filter permet de filtrer les éléments d'un tableau en fonction d'une fonction de rappel. Si aucun rappel n'est donné, comme indiqué dans le manuel:

Si aucun rappel n'est fourni, toutes les entrées d'entrée égales à FALSE (voir conversion en booléen) seront supprimées.

Notez que cela filtrera également les valeurs falsy.Si vous voulez des valeurs de filtre seulement qui sont explicitement false:

function filter_false($val) 
{ 
    return $val !== false; // if $val is not false, it'll be kept 
} 
$keys = array_keys(array_filter($array, 'filter_false')); 
-1
foreach ($array as $key => $value) { 
    if ($value == true) echo $key . "<br/>"; 
} 
Questions connexes