[RESOLU] Array_map ... Grande découverte

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Array_map ... Grande découverte

Re: Array_map ... Grande découverte

par Webylog » 06 mai 2013, 15:23

Merci pour ta réponse ...

Si je comprends le fonctionnement le fait d'utiliser ' & ' sur la var permet de créer une sorte de pointeur qui te permet donc de modifier à la volée la valeur de celle ci ...

Je t avoue j ai pas encore regardé pour les closures ... ce que je vais faire tres vite :D en tout cas merci =D>

Et bien là ... je te dis merci ... Nickel et en plus je me suis rendu que j'étais pas très loin du résultat final ... persévérance ... lol

Re: Array_map ... Grande découverte

par Yosh » 06 mai 2013, 15:02

regarde du côté des closures (ou fonctions anonymes en fr) et tu trouveras ton bonheur.

Et juste pour que ce soit plus lisible (l'exemple est simplifier):
<?php
$tableau = array();
for($i=1;$i<50;++$i) {
    $tableau[] = "produit_$i.htm";
}

$minmax = array(
    'min' => 0, 
    'max' => 0
);

$callback = function ($value) use (&$minmax) {
    preg_match('![0-9]+!' , $value , $extract);
    if($extract[0] < $minmax['min']) {
        $minmax['min'] = $extract[0];
    }
    if($extract[0] > $minmax['max']) {
        $minmax['max'] = $extract[0];
    }
};

$result = array_map($callback, $tableau);

var_dump($minmax);

Array_map ... Grande découverte

par Webylog » 06 mai 2013, 11:41

Bonjour à tous ...

Progressant chaque jour dans le Php je découvre des choses et particulièrement cette fonction : array_map qui permet d'exécuter récursivement sur un tableau une fonction fournie en entrée ...

J'ai donc commencé avec des utilisations plutôt classique ... passer un tableau complet en majuscules etc ...

Dernièrement j'ai rajouter des recherche regexp mais là je commence à bloquer sur le problème suivant :

Une des façon de poser cette fonction est je suppose :
array_map(function($value) {
     echo $value;
} , $un_tableau);
La où je commence à galérer serait plutôt sur la possibilité de passer plusieurs paramètres à la fonction. J'ai lu la définition de array_map sur Php.net qui nous explique qu'il est possible de travailler avec plusieurs tableaux du genre :
function show_Spanish($n, $m)
{
    return("Le nombre $n se dit $m en Espagnol");
}

function map_Spanish($n, $m)
{
    return(array($n => $m));
}

$a = array(1, 2, 3, 4, 5);
$b = array("uno", "dos", "tres", "cuatro", "cinco");

$c = array_map("show_Spanish", $a, $b);
print_r($c);

$d = array_map("map_Spanish", $a , $b);
print_r($d);
Voulant toujours faire plus raccourci ... d'ailleurs je sais pas si c'est un bon reflexe ... j'essaye d'adapter cela à mon exemple suivant :

Lecture d'un repertoire avec la fonction glob() sur le masque suivant :glob("produits/produit_*.htm")

Ce qui m'interesse maintenant c'est la valeur du ' * ' que j'aimerais classer dans une valeur min et une valeur max afin d'avoir le premier numéro ainsi que le dernier ...

Et là ca bloque ... voici le code ...
$pointeur=opendir('./produits');
$tableau = glob("produits/produit_*.htm");
$nombre = count($tableau);
$res = array();
$minmax = array( 'min' => 0 , 'max' => 0);


array_map(function($value) { 
				preg_match('![0-9]+!' , $value , $extract);  
				$minmax['min'] = ( $extract[0] < $minmax['min'] ) ? $extract[0] : $minmax['min'];
				$minmax['max'] = ( $extract[0] > $minmax['max'] ) ? $extract[0] : $minmax['max'];
			} , $tableau , $minmax);
					
L'erreur générée est la suivante :
Notice: Undefined variable: minmax in C:\wamp\www\
M'y suis-je mal pris ??? Qu'est ce qui ne peux ne pas convenir suivant vos avis ?

Merci d'avance pour vos réponses ....