Recuperer variable tableau array

fred65
Invité n'ayant pas de compte PHPfrance

01 avr. 2010, 21:05

Bonjour à tous,
voila, je voudrais arriver à récupérer une variable "concordante" dans un tableau array. Etant debutant, je m'explique mal alors voici un exemple :
 $produit = array("pain", "lait", "chocolat");
         $recherche = "pain cacahuète";
         $motcle = explode(" ", $recherche);
    if (in_array($motcle[0], $produit))
   {
    echo 'Nous avons ce produit :' . $motcle;
   }
   elseif (in_array($motcle[1], $produit))
   {
    echo 'nous avons ce produit :' . $motcle;
   }
Donc, je que je voudrais, si c'est faisable, c'est récupérer la variable qui est "concordante" ( pain, dans cet exemple ), pour pouvoir l'utiliser.
Merci

Mammouth du PHP | 985 Messages

01 avr. 2010, 21:29

Bonjour,
tu peux regarder la fonction array_diff_key():
http://fr.php.net/manual/fr/function.array-diff-key.php

Ou array_intersect():
http://fr.php.net/manual/fr/function.ar ... ersect.php

...
Modifié en dernier par Dr@ke le 01 avr. 2010, 21:37, modifié 3 fois.
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

ViPHP
ViPHP | 5462 Messages

01 avr. 2010, 21:30

array_search ?

fred65
Invité n'ayant pas de compte PHPfrance

01 avr. 2010, 22:01

Merci beaucoup, je regarde ça tout de suite !

ViPHP
ViPHP | 2291 Messages

01 avr. 2010, 23:26

Salut,

Quelque chose dans le genre :?:
En partant de ton exemple
<?php
 $produit = array( 'pain', 'lait', 'chocolat');
 $recherche = 'pain lait';
 $motcle = explode(" ", $recherche);
 $n = count($motcle);


 for ($i=0; $i<$n; $i++) {
 	$Resultat[$i] = array_search($motcle[$i], $produit);
    $af[$i] = (isset($Resultat[$i]) && ($Resultat[$i] == true)) ? 'Nous avons ce produit : '.$motcle[$i] : 'Pas de produit : '.$motcle[$i];
    echo '<li>' .$af[$i] .'</li>';

 }

?>
Modifié en dernier par dunbar le 01 avr. 2010, 23:31, modifié 1 fois.
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

ViPHP
ViPHP | 5462 Messages

01 avr. 2010, 23:30

pourquoi tu fais pas un foreach sur le tableau ca serais plus simple :wink: (et un coup d'array_unique en bonus)
$produit    = array(1  => 'pain',
                  2 => 'lait',
                  3 => 'chocolat');
                  
$recherche  = 'pain lait cacahuète chocolat lait';
$motcle     = array_unique(explode(" ", $recherche));

foreach($motcle as $mot)
{
   if(array_search($mot, $produit))
    {
        echo sprintf('Nous avons ce produit : %s <br />', $mot);
    }
    else
    {
         echo sprintf('Pas de produit : %s <br />', $mot);
    }
}

Mammouth du PHP | 985 Messages

01 avr. 2010, 23:47

Erreur de ma part:
array_diff_key() n'est pas intéressant ici.
$produit    = array(1  => 'pain',
                  2 => 'lait',
                  3 => 'chocolat');
                 
$recherche  = 'pain lait cacahuète chocolat lait';
$recherche  = explode(" ", $recherche);

$result = array_intersect($produit, $recherche);

// Les produits disponibles
print_r($result);
Modifié en dernier par Dr@ke le 01 avr. 2010, 23:51, modifié 1 fois.
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

ViPHP
ViPHP | 5462 Messages

01 avr. 2010, 23:50

par contre le coup du array_intersect c'est bien ca, si il veux juste les valeurs qui correspondent c'est qu'il faut utiliser

Mammouth du PHP | 985 Messages

01 avr. 2010, 23:59

$produit    = array('pain', 'lait', 'chocolat');
                 
$recherche  = 'pain lait cacahuète chocolat lait';
$recherche     = array_unique(explode(" ", $recherche));

$result = array_intersect($produit, $recherche);

// Les produits disponibles
print_r($result);
Mais bon, il doit y avoir des tonnes de solutions, et oui array-search() pour chercher juste une valeur :)
Modifié en dernier par Dr@ke le 02 avr. 2010, 06:44, modifié 3 fois.
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

fred65
Invité n'ayant pas de compte PHPfrance

02 avr. 2010, 00:33

Les gars vous êtes balèzes ! Je vois qu'il me reste du chemin à faire. :D
Vous m'avez donné de quoi me faire la main...
Je retient surtout la solution de stealth35 avec le "foreach" et "array_search"(sans faire de jaloux) qui me semble etre exactement ce qu'il me fallait.
Une chose, par contre, est il possible de faire en sorte que la fonction ne tienne pas compte de la casse ? ex: pain=Pain

ViPHP
ViPHP | 5462 Messages

02 avr. 2010, 00:42

il en prend pas compte a la base

Mammouth du PHP | 985 Messages

02 avr. 2010, 00:46

Regarde les commentaires dans la page du manuel de la fonction array_search() :wink:
http://fr.php.net/manual/fr/function.ar ... .php#96533

(Les commentaires sont souvent tout autant intéressants)
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphant du PHP | 170 Messages

02 avr. 2010, 03:57

Bonjour,
Mais bon, il doit y avoir des tonnes de solutions ...
sans tenir compte de la casse
<pre>
<?php

$produit = array("pain", "lait", "Chocolat");
$recherche = "Pain    cacahuète chocolat";

$motif = preg_replace('/ +/', '|', $recherche);
$disponible = preg_grep("/$motif/i", $produit);

print_r($disponible);

?>
</pre>

Mammouth du PHP | 985 Messages

02 avr. 2010, 06:21

Oui il y a des tonnes de façons :)
$produit = array('pain', 'lait', 'chocolat');
                 
$recherche = 'Pain lait cacahuète chocolat lait';
$recherche = array_unique(explode(' ', $recherche));
$recherche = array_intersect($produit, array_map('strtolower', $recherche));

// Les produits disponibles
print_r($recherche);
<?php
$produit = array('pain', 'lait', 'chocolat');
                 
$recherche = 'Pain lait cacahuète chocolat lait';
$recherche = array_unique(explode(' ', $recherche));

foreach($recherche as $mot)
{
   if(in_array(strtolower($mot), $produit))
    {
        echo sprintf('Nous avons ce produit : %s <br />', $mot);
    }
   else
    {
        echo sprintf('Pas de produit : %s <br />', $mot);
    }
}
?>
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

fred65
Invité n'ayant pas de compte PHPfrance

02 avr. 2010, 08:53

Enfin un vrai forum d'entraide !
Je ne sais comment vous remercier tous. Mon probleme est résolu et je vous le doit.
Merci encore; I'll be back... =D>