Tableau multi-dimmension: recupérer clé

gui
Eléphant du PHP | 100 Messages

24 mars 2010, 13:26

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

devlop78
Invité n'ayant pas de compte PHPfrance

24 mars 2010, 14:56

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']] ?

gui
Eléphant du PHP | 100 Messages

24 mars 2010, 15:15

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

ViPHP
ViPHP | 5462 Messages

24 mars 2010, 15:34

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

gui
Eléphant du PHP | 100 Messages

24 mars 2010, 15:53

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é??

ViPHP
ViPHP | 5462 Messages

24 mars 2010, 15:57

c'est pareil que array_search mais version recursive

gui
Eléphant du PHP | 100 Messages

24 mars 2010, 16:45

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

ViPHP
ViPHP | 5462 Messages

24 mars 2010, 16:59

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);

gui
Eléphant du PHP | 100 Messages

24 mars 2010, 17:05

Ok je vais reessayé

devlop78
Invité n'ayant pas de compte PHPfrance

25 mars 2010, 01:51

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.

gui
Eléphant du PHP | 100 Messages

25 mars 2010, 12:14

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

devlop78
Invité n'ayant pas de compte PHPfrance

25 mars 2010, 17:37

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.

gui
Eléphant du PHP | 100 Messages

25 mars 2010, 17:54

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.

ViPHP
ViPHP | 5462 Messages

25 mars 2010, 17:55

montre le code qui te donne cette erreur

devlop78
Invité n'ayant pas de compte PHPfrance

25 mars 2010, 17:59

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; ???