2010-02-13 2 views
4
<?php 
$string = "hey"; 

foreach(range('a','z') as $i) 
{ 
if($string == '$i') 
{ 
echo $i; 
} 
} 
?> 

Pourquoi cela ne fonctionne-t-il pas? s'il vous plaît dites-moi.Php Alphabet Loop

+0

Qu'est-ce que vous essayez de faire réellement? – meouw

+0

ouais, qu'est-ce qui ne fonctionne pas? Vous comparez chaque lettre de l'alphabet à "hé" alors c'est normal que rien ne se passe. – Daan

Répondre

2

Il est, mais vous ne voyez pas quoi que ce soit parce que:

'hey' != '$i' 

Aussi, si votre $ i n'a pas été guillemets simples (ce qui en est la valeur '$ i' littéralement)

'hey' != 'a'; 
'hey' != 'b'; 
'hey' != 'c'; 
... 
'hey' != 'z'; 
0

Au lieu de tester == jetez un oeil sur la fonction strspn()

22

Vous avez deux problèmes dans votre code. Tout d'abord, les chaînes de guillemets simples (') se comportent différemment des chaînes de guillemets doubles ("). Lors de l'utilisation de chaînes de guillemets simples, les séquences d'échappement (autres que \' et \\) ne sont pas interprétées et les variables ne sont pas utilisées. Cela peut être fixé en tant que tel (enlever les guillemets, ou les changer à guillemets doubles):

$string = 'hey'; 

foreach(range('a','z') as $i) { 
    if($string == $i) { 
    echo $i; 
    } 
} 

PHP Documentation: Strings


Deuxièmement, votre condition ne sera jamais évaluée à TRUE comme 'hey' n'est jamais égal à une seule lettre de l'alphabet. Pour évaluer si la lettre est dans le mot, vous pouvez utiliser strpos():

$string = 'hey'; 

foreach(range('a','z') as $i) { 
    if(strpos($string, $i) !== FALSE) { 
    echo $i; 
    } 
} 

Le !== FALSE est important dans ce cas comme 0 also evaluates to FALSE. Cela signifie que si vous supprimiez le !== FALSE, votre premier personnage ne serait pas sorti.

PHP Documentation: strpos()
PHP Documentation: Converting to boolean
PHP Documentation: Comparison Operators

+1

Bien mieux que ma réponse – meouw