8797 sujets

Développement web côté serveur, CMS

Bonjour, j'ai un souci et ça serait vraiment sympa de m'aider...

Voilà le problème (avec un code schématique) :

J'aimerais trier mon objet "fruits", en ne gardant que les pommes. Cela fonctionne si, dans la fonction "condition", je remplace $valeur par 'pomme'.
Par contre, je ne sais pas comment récupérer la valeur depuis la commande "$fruits->tri('pomme')". Est-il possible d'ajouter un argument à la fonction "condition", utilisée par array_filter? J'ai aussi essayé avec en y déclarant la variable $valeur comme "global", mais cela ne fonctionne pas.
Voyez-vous une solution?

<?php

class classe
{
	public $fruits;

	public function __construct()
	{
		$fruits = array('pomme','poire','pomme','cerise','cerise','pomme','poire');
		$this->fruits = $fruits;		
	}
	function tri($valeur)
	{
		function condition($article)
		{
			if($article==$valeur)
				return true;
		}
		$this->fruits = array_filter($this->fruits, condition);
	}
}

$fruits = new classe;
$fruits->tri('pomme');

print_r($fruits);

?>


Merci d'avance...
Modifié par le rouge (18 Dec 2008 - 14:09)
Salut,
$valeur n'est pas visible dans la fonction condition. Une solution serait de générer le code de cette fonction à la volée avec create_function :
$this->fruits = array_filter($this->fruits, create_function('$article', 'return $article==\'' . addslashes($valeur) . '\';'));

Ne fonctionne que si $valeur est une string, sans ça, il faudra surement utiliser autre chose.
a+