pb fonction callback et tableaux

Répondre
gnac
le 03/01/2004 à 23:35
gnac
Bonjour!

Bon déjà je suis pas très doué en php, et en plus là je suis vraiment perdu :P Donc si vous pouviez m'aider...
Voilà mon problème:

J'ai un tableau de départ contenant une série de tableaux.
Je souhaiterai isoler certains de ces tableaux en fonction d'un paramètre.
-> Il faut qu'un champ (des tableaux contenus dans le grand tableau) ait une certaine valeur, variable.

Et euh, je suis arrivé à pouvoir isoler ces tableaux grâce à la fonction array_filter et à une fonction callback.

J'ai donc:

<?
//Fonction callback
function present($var) {

if($var['cle']=="valeur") return TRUE; else return FALSE;
}
//Fin

//$array est le 'grand tableau' contenant les petits
$resultat = array_filter($array,"present");
?>


Jusque là ça marche très bien ! Oui, sauf que ma valeur ("valeur") n'est pas variable ! Si je souhaite la faire varier... je dois rajouter une condition à la fonction callback... et là VLAN ! Erreur puisqu'il faut un argument par tableau ou je sais pas trop quoi :P Enfin bon, ça me fait en fait cette erreur: Warning: Missing argument 2 for present() in testtab.php on line 21...
J'ai essayé pleins de trucs... sans résultats :/ Si ça se trouve, c'est peut être tout bête, tout niais, mais bon comme je l'ai dit je suis pas très doué :P

Et si y a un autre moyen plus simple de faire la même chose, je précise qu'en fait il y a deux conditions et non pas une... je voulais simplifier l'explication. Voilà merci :)
LA GLOBULE
le 03/01/2004 à 23:43
LA GLOBULE
Que vaut clé ?

Sinon, ecrit voir le code qui pose probleme (la si j'ai bien compris, le code que tu as mis fonctionne).
gnac
le 03/01/2004 à 23:59
gnac
Euh oui le code qui j'ai ecrit fonctionne, c'est vrai j'aurais dû mettre celui qui marche pas -_-

Donc voilà le code qui marche pas :
<? 
//Fonction callback
function present($var,$valeur) {

if($var['cle']==$valeur) return TRUE; else return FALSE;
}
//Fin

//$array est le 'grand tableau' contenant les petits
$resultat = array_filter($array,"present");
?>


La clé doit en fait être égal à une valeur numérique, mais peu importe (non?). $var['clé'] correspond à la valeur d'un champ des 'petits' tableaux ayant comme index associatif le mot "clé".
LA GLOBULE
le 04/01/2004 à 00:14
LA GLOBULE
Ok, j'ai pigé le probleme.

La fonction de callback ne peut prendre qu'un seul paramètre.
Or toi, tu lui en donnes deux.

Une solution serait de mettre une variable globale dans ton script.

Exemple :

<?php
function present($var) {
global $valeur;
if($var['cle']==$valeur) return TRUE;
else return FALSE;
}
?>


Et la, dans ton script, lorsque tu modifies $valeur, ben tu retrouveras la nouvelle valeur de $valeur dans ta fonction (en clair, $valeur n'est pas une variable "interne" à ta fonction : tu peux modifier sa valeur directement depuis ton script).

Pour bien tester ce truc de global, je te propose de lire la manuel php à propos de la portée des variables.
gnac
le 04/01/2004 à 00:22
gnac
C'est parfait, ça marche youplala smiley
Merci beaucoup ! Et pour la lecture aussi, car j'en ai bien besoin ^^
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours