Page 1 sur 3
Tableau multi-dimmension: recupérer clé
Posté : 24 mars 2010, 13:26
par gui
Bonjour à tous,
Voila je cherche a récupérer la première clé de mon tableau multidim à partir de la valeur du $pr
$tab[]=array ( "1" => "$msf",
"2" => "$profil",
"3" => "$pr"
);
J'utilise donc cette fonction : echo $res=array_search("[3]$mx",$tab);
Lorsque $mx corespond à $pr, j'aimerai qu'il m'affiche la clé de $tab contenant le tableau array affin de recupérer $msf et $profil à partir du $mx.
Cela ne fonctionne pas, il ne m'affiche rien.
A noter que j'ai un autre problème: $tab[] est censé s'autoincrémenté, au lieu de ca il me met une clé toujours égale à 0.
Merci d'avance pour vos réponses
Re: Tableau multi-dimmension: recupérer clé
Posté : 24 mars 2010, 14:56
par devlop78
Si tu veux qu'il s'auto incrémente, évite déjà de lui fournir des clés en string.
$mavar[] = xxx
$mavar[] = xxx
$mavar[] = xxx
donnera une autoincrémentation
$mavar[0]
$mavar[]
$mavar[]
certainement aussi
mais $marvar['lol'] puis $mavar[] ça ne m'étonne pas que cela ne fonctionne pas.
A part ça, j'ai rien compris ...
peut-être $tab[$tab['3']] ?
Re: Tableau multi-dimmension: recupérer clé
Posté : 24 mars 2010, 15:15
par gui
J'ai enlevé les clés mais il ne s'incrémente toujours pas,
$tab[]=array ("$msf","$profil","$pr");
Seule les valeurs à l'intérieur s'incrémente d'elle même.
Pour la suite du problème un autre script me donne une valeur $mx qui se trouve parmis les varaibles $pr du tableau $tab et je veux récupérer la clé de $tab lorsque $mx correspond à $pr normalement la commande serai du type:
array_search("$mx['2']",$tab);
Mais elle ne fonctionne pas:
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING
Re: Tableau multi-dimmension: recupérer clé
Posté : 24 mars 2010, 15:34
par stealth35
non ca marche pas comme ca, par contre ta des exemples de fonction type array_search_recursive
http://www.php.net/manual/fr/function.a ... .php#91365
Re: Tableau multi-dimmension: recupérer clé
Posté : 24 mars 2010, 15:53
par gui
Je comprend mal l'utilisa tion de cette boucle et de cette fonction ecursive_array_search
foreach($haystack as $key=>$value) {
$current_key=$key;
if($needle===$value OR (is_array($value) && recursive_array_search($needle,$value))) {
return $current_key;
}
Je compare ma valeur ici $needle avec la variable valeurs contenus dans mon tableau et elle me renvoie la clé??
Re: Tableau multi-dimmension: recupérer clé
Posté : 24 mars 2010, 15:57
par stealth35
c'est pareil que array_search mais version recursive
Re: Tableau multi-dimmension: recupérer clé
Posté : 24 mars 2010, 16:45
par gui
Je suis désolé, je voie parfaitement comment utiliser array_search mais avec recursive je ne voie pas, la fonction en exemple est peu explicite, je ne comprend pas comment l'utiliser
Re: Tableau multi-dimmension: recupérer clé
Posté : 24 mars 2010, 16:59
par stealth35
Je suis désolé, je voie parfaitement comment utiliser array_search mais avec recursive je ne voie pas, la fonction en exemple est peu explicite, je ne comprend pas comment l'utiliser
tu recopies la fonction et tu l'utilises
function recursive_array_search($needle,$haystack) {
foreach($haystack as $key=>$value) {
$current_key=$key;
if($needle===$value OR (is_array($value) && recursive_array_search($needle,$value))) {
return $current_key;
}
}
return false;
}
$found = recursive_array_search('kikoo', $arr);
var_dump($found);
Re: Tableau multi-dimmension: recupérer clé
Posté : 24 mars 2010, 17:05
par gui
Ok je vais reessayé
Re: Tableau multi-dimmension: recupérer clé
Posté : 25 mars 2010, 01:51
par devlop78
oui mais non
$tab[]=array ("$msf","$profil","$pr");
là tu es en train de lui dire :
$tab[0][0] = $msf;
$tab[0][1] = $profil;
$tab[0][2] = $pr;
Ou alors tu fais ça cool $tab[]=array ("$msf","$profil","$pr"); et si vraiment l'auto-incrémentation ne fonctionne pas, utilise count($tab) pour savoir à quelle position tu dois placer tes données.
Au passage, "$msf" bouffe inutilement de la ressource, $msf serait mieux.
Re: Tableau multi-dimmension: recupérer clé
Posté : 25 mars 2010, 12:14
par gui
Etrange cette histoire d'auto-incrémentation, effectivement lorsque je fais $tab[]=array ($msf,$profil,$pr);
Il me retourne cela
$tab[0][0] = $msf;
$tab[0][1] = $profil;
$tab[0][2] = $pr;
Mais en un sens c'est se que je souhaite par contre il me fait cela pour tous les élément de $tab or moi je souhaiterai que le 2eme element de $tab soit :
$tab[1][0] = $msf;
$tab[1][1] = $profil;
$tab[1][2] = $pr;
Et ainsi de suite. Je pense que à chaque tour de boucle il me crée un nouveau tableau par dessus l'ancien donc l'auto incrément ne fonctionne pas, je ne voie pas comment faire.
Concernant la fonction celle ci ne fonctionne pas peut etre parsque je travaille en POO, voila l'erreur retourné:
Fatal error: Cannot redeclare recursive_array_search() (previously declared in /opt/lampp/htdocs/profils/selection.php:130) in /opt/lampp/htdocs/profils/selection.php on line 130
Re: Tableau multi-dimmension: recupérer clé
Posté : 25 mars 2010, 17:37
par devlop78
non ce n'est pas une erreur de POO c'est une erreur de rédéclaration de fonction déjà existante. Par exemple, deux include sur le même fichier, ou site tu crées une fonction que Php possède déjà, etc ...
Pour ton problème, je ne sais pas ... peut-être devrais-tu réfléchir sur la logique interne de ton système.
Re: Tableau multi-dimmension: recupérer clé
Posté : 25 mars 2010, 17:54
par gui
Habituellement j'incrémente dansune boucle formais dans ce cas c'est impossible, j'ai alors pensé faire quelque chose du type:
$i;
$tab[$i]=array ($msf,$profil,$pr);
$i++;
Ce serai bon car $i serai toujour différent quelque soit le nombre de tour de boucle ect...
Mais il me dit que $i est non définit.... C'est justement le but si je le definis, à chaque tour de boucle $i se réinitialisera...
Je ne vois pas comment faire ces 2 problèmes me bloquent et m'empêchent d'avancer
Si vous avez une solution je suis tout ouie..
Je vous remerci pour tout ce que vous avez déjà fait.
Re: Tableau multi-dimmension: recupérer clé
Posté : 25 mars 2010, 17:55
par stealth35
montre le code qui te donne cette erreur
Re: Tableau multi-dimmension: recupérer clé
Posté : 25 mars 2010, 17:59
par devlop78
Il nous faut + de code. soit tu veux que $i comme à 0 (pourquoi pas un for ?) soit tu veux qu'il commence à la dernière clée.
$i; ???
$i = 0; ??
(!isset($i)) $i= 0; ???