Tester presence valaur dans tableau ?

AllPHP13
Invité n'ayant pas de compte PHPfrance

10 mai 2006, 16:26

Bonjour
J'ai un tableau en session :

$_SESSION[arr][]=array('ref' => $ref,'designation' => $designation)

J'aimerais tester la présence d'une variable $ref dans ce tableau

Comment faire ?
in_array($ref,$_SESSION['ar'] )
Grand merci

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

10 mai 2006, 16:28

Comment faire ?
in_array($ref,$_SESSION['ar'] )
Bingo ;)

Est-ce que tu as seulement essayé avant de poster ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

10 mai 2006, 16:31

Fait voir comment tu fait ton test
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

allphp13
Invité n'ayant pas de compte PHPfrance

10 mai 2006, 16:35

if(isset($_SESSION['arr']) && in_array($ref, $_SESSION['arr'])){echo 'valeur trouvee';}

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

10 mai 2006, 16:38

Et si, avant le test, tu fait ça :
var_dump($_SESSION);
tu obtient quoi ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

10 mai 2006, 16:38

Chuis po sur que ca marche.. y a une deuxième dimension incidieusement planquée dans son tableau...

A confirmer, mais je pense qu'il faut boucler et tester pour chaque sous tableau si celui-ci contient la valeur recherché, le premier ne contenant finalement que des Array()

cela dit chuis pas allé vérifié, le in_array fonctionne peut être de manière récursive, dans ce cas là, z'avez qu'à faire comme si j'avais rien dit :)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

10 mai 2006, 16:39

en fait, comme il donne $_SESSION[$arr], il passe un sous-tableau de $_SESSION donc ca marche. J'utilise souvent cette manière de faire et je n'ai jamais eu de soucis :-k
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

allphp13
Invité n'ayant pas de compte PHPfrance

10 mai 2006, 16:40

J'ai le contenu complet du tableau qui s'affiche

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

10 mai 2006, 16:41

Est-ce que le contenu de $ref s'y trouve ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Invité
Invité n'ayant pas de compte PHPfrance

10 mai 2006, 16:41

Pour la valeur qui m'intéresse :

array(5) { ["ref"]=> string(6) "2303-4"

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

10 mai 2006, 16:46

zeus >> ben vi, mais le sous tableau $_SESSION[$arr] est justement un tableau de tableau :
$_SESSION[arr][]=array(...)
d'où mon interrogation pour savoir si le in_array irait jusque là pour retourner un résultat ou s'il s'arrêterais au premier niveau ne contenant que des tableaux et retournant qu'il ne l'a pas trouvé...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

10 mai 2006, 16:50

put***, j'avais pas vu ... :?

C'est soit tu fait
$_SESSION[$arr]["ref"] = $ref;
$_SESSION[$arr]["designation"] = $designation;
soit tu fait
$_SESSION[$arr] = array('ref' => $ref,'designation' => $designation);
Mais pas les 2, sinon tu as une dimension en trop ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

allphp13
Invité n'ayant pas de compte PHPfrance

10 mai 2006, 16:57

Mon tableau est concu de cette façon :
$_SESSION[$arr] = array('ref' => $ref,'designation' => $designation);  

[/php]

Invité
Invité n'ayant pas de compte PHPfrance

10 mai 2006, 17:00

Je m'en suis sorti comme ça :
foreach( $_SESSION['devis'] as $v )
{
if($v['ref']==$ref){echo 'toto';}
}

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

10 mai 2006, 17:26

Ah ben oui mais tu triches, tu changes en cours de route... s'il n'y a qu'une dimension ce que disais zeus était juste et le in_array devrait normalement très bien fonctionner... :)

Pour le coup, le foreach ne sert à rien, autant faire directement :
if( $_SESSION['devis']['ref']==$ref){echo 'toto';} 

//ou 
if ( in_array($ref,$_SESSION['devis']) ){echo 'toto';} 
// sachant que du coup il ira aussi regarder s'il trouve la valeur dans "designation"