Version complète: sur le forum Webmaster Hub : Utilisation de Array
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
joboy84
Bonjour,

J'aimerai créer un jeu. Si le client trouve un chiffre qui n'est pas présent dans mon tableau, il aura gagné...sinon il aura perdu.

Le problème est que je ne m'y connait pas trop avec les array.

J'ai pensé faire:
CODE
<?php

if (
in_array($mot, array(sac,briser,tigre))
{
echo"Vous avez perdu mais vous êtes sur la bonne voie";
}
else
{
echo"Vous avez trouvé le bon mot";
}
?>


Je pense que cela devrait fonctionner.

Par contre j'aimerai que si le client tape par exemple "sachet" ou "labrisera" (fantaisiste) cela détecte que le mot était présent.

Ex: sachet contient bien sac

Comment faire pour indiquer : Si le $mot est présent en partie ?

On peut faire:
CODE
<?php in_array(%$mot%, array(sac,briser,tigre)) ?>


Merci
KnockedMaster
Salut,

Pour vérifier si une chaîne A contient une chaîne B, tu peux détourner strpos .

@+
joboy84
CITATION(KnockedMaster @ dimanche 15 juin 2008 à 14:29) *
Salut,

Pour vérifier si une chaîne A contient une chaîne B, tu peux détourner strpos .


Bonjour,

Merci pour votre aide.

Par contre jene vois pas comment utiliser cette fonction.

Je devrais faire comme cela?

CODE
<?php
$machaine = 'sac,briser,tigre';
//ou $machaine = 'sac briser tigre';
$atrouver   = '$mot';
$pos = strpos($machaine, $atrouver);

if ($pos === false) {
    echo "La chaîne '$atrouver' n'a pas été trouvée dans la chaîne '$machaine'";
} else {
    echo "La chaîne '$atrouver' a été trouvée dans la chaîne '$machaine'";
    echo " et à la position $pos";
}
?>


Merci
Kioob
Ou bien utiliser une simple boucle sur le tableau.
joboy84
Merci pour vos suggestions mais...

Supposons que je fasse:

CODE
<?php
$mot = 'rosace';
$tableau = array(sac, briser, tigre);
foreach ($tableau as $value)
{
if ($mot = $value)
{
echo"Vous avez presque trouvé";
}
else
{
echo"Vous avez perdu";
}
}
?>


Le mot "rosace" contient "sac"...Comment faire pour dire: si le mot contient en partie un des mots du tableau... Je ne peux pas utiliser %$value% ici ou bien?

Merci
Kioob
dans la boucle il faut utiliser strpos, comme conseillé par KnockedMaster
joboy84
Bonjour,

J'ai fait:

CODE
<?php

$mot = 'rosace';
$tableau = array(sac, briser, tigre);
foreach ($tableau as $value)
{
$pos = strpos($value, $mot);
if ($pos === false)
{
echo"Vous avez presque trouvé";
break;
}
else
{
echo"Vous avez perdu";
break;
}
}
?>


Cela m'indique bien : "Vous avez presque trouvé". Par contre si je change la variable mot : $mot = 'block';

Cela m'indique aussi Vous avez presque trouvé...alors que dans ce cas de figure, cela devrait être le contraire...
KnockedMaster
Re-,

C'est normal, tu confonds les termes à traiter et à trouver. La fonction est détournée, ne pas l'oublier. Elle renvoie false si elle ne trouve pas la position de la chaîne à trouver dans la chaîne à traiter. Autrement dit quand elle ne trouve pas le mot. Or si elle ne trouve pas le mot, vous avez perdu. CQFD wink.gif

CODE
<?php

$mot     = 'sac';
$tableau = array('rosace', 'briser', 'tigre');

foreach ($tableau as $value)
{
    
    if (strpos($value, $mot)  === false)
    {
        echo "Vous avez perdu";
        break;
    }
    else
    {
        echo "Vous avez presque trouvé";
        break;
    }
}
?>


Bonne soirée
joboy84
Effectivement... nonono.gif

Merci pour votre aide tongue.gif

Bonne soirée smartass.gif

joboy84
Arf,

Je m'étais réjouis trop vite...

Le problème est le suivant:

Si je cherche la première occurence du tableau, cela fonctionne, mais pas pour les autres...


Exemple: Je mets le mot sac. Cela m'indiquera "Vous avez presque trouvé" car ce mot est contenu dans rosace. Si maintenant je mets le mot "ris" dans la variable mot, cela m'indiquera "Vous avez perdu"...alors que ris est dans briser...

En gros, seul le premier élément du tabeau est pris en compte...
KnockedMaster
Salut,

Heu, c'est encore normal (comme bien souvent en informatique), je n'ai plus pensé aux break de ta boucle, je ne les utilise pas souvent blush.gif

En fait tu ne fais jamais qu'un tour dans ta boucle puisqu'à la première condition, que le retour soit true ou false, tu breakes.

Impossible dans ces conditions de tester le deuxième ou le troisième mot de ton tableau. Re-CQFD tongue.gif

CODE
<?php

$mot      = 'igr';
$tableau = array('rosace', 'briser', 'tigre');

foreach ($tableau as $value)
{
    if (strpos($value, $mot) === false)
    {
        echo "Vous avez perdu";
    }
    else
    {
        echo "Vous avez presque trouvé";
        break;
    }
}
?>


A toi de gérer les affichages comme bon te semble ...

Voili voilou

Bonne continuation
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.