8722 sujets

Développement web côté serveur, CMS

Bonjour ! Smiley smile

J'ai actuellement un script qui s’exécute comme cela :

while {

if1 {

$variable;
$function_récursive;

}

if2 {


}

}

J'ai besoin de garder en mémoire la valeur de la variable car j'en ai besoin pour appeler la fonction récursive !

Problème quand le script passe dans if2, puis qu'il retourne dans if1; il ne me garde pas en mémoire la valeur de la variable !

Comment faire ?

J'ai essayé: $variable = isset($variable) ? $variable : 0;

Mais c'est pareil Smiley ohwell Quand il retourne dans le if1 après être passé dans le if2, la variable reprend la valeur 0 Smiley ohwell

Comment faire pour garder en mémoire cette variable ?

Merci d'avance !
Pourquoi ne pas mettre le vrai code plutot qu'un pseudo algo comme ça ?
Tu veux une explication sur le comportement d'un script mais on ne le voit même pas.

A vu d'oeil et en essayant de deviner, je pense que tu dois avoir un truc comme ça :

while {
[b]$variable = 0;[/b]
if1 {

$variable;
$function_récursive;

}

if2 {


}

}


Il faut donc que tu sortes ton $variable=0 avant la boucle.

Mais comme dit au dessus, avec le code exact... Smiley smile
Le reste du code est inutile et surtout long ...

J'ai juste besoin de comprendre l'architecture que je dois utiliser Smiley smile

while($blabla = $bloblo->fetch()) {
			

			$count= isset($count) ? $count : 0;
			

			if($blabla==1) {

							$variable=''.$link.'';
							recursive($variable,$count);

					
			}
			
			
			if($blabla==0) {
				echo 'blabla = 0';
				}
		}


J'ai essayé comme ça mais c'est pareil ...


Dans ma fonction recursive j'incrémente la variable $count

Mais a chaque fois que la seconde condition est remplis et qu'il re éxecute la première condition, $count reprend 0 en valeur ....
Je ne sais pas si cela vient de là ou pas, mais dans le bout de code, $count n'est jamais modifié.

Ta fonction recursive ne devrait elle pas renvoyer une donnée ?

$count = recursive($variable,$count);
Effectivement déjà ma fonction ne retourne pas la variable ! (je ne lui es pas dit : return $varaible )

Par contre ma fonction affiche des résultats (echo) donc comment faire pour recuperer que le retour de la variable généré par la function ?
Modérateur
iloveelearning a écrit :

Par contre ma fonction affiche des résultats (echo) donc comment faire pour recuperer que le retour de la variable généré par la function ?

Peu importe ce que la fonction fait, en php seul compte ce que tu retournes.


  function recursive($v, $c){
    echo 'blabla'.$v;
    return $c + 1;
  }
  …
  $count = recursive($variable, $count);


Ou sinon en passant par référence:

  function recursive($v, &$c){
    echo 'blabla'.$v;
    $c++;
  }
  …
  $count = 2;
  recursive($variable, $count);
  // $count vaut maintenant 3


Après tu fais vraiment de la récursion?
Car un vrai pattern récursif serait plutôt de la sorte:

function recursive($bloblo, $count = 0) {
  if ($blabla = $blolo->fetch()){
    echo 'blabla'.$blabla;
    recursive($bloblo, $count+1);
  } 
}
recursive($bloblo);

Mais la récursion pour explorer une simple liste avec une seule profondeur c'est pas terrible comme pattern.
Hello!

Désolé de revenir que maintenant mais je n'avais plus internet -_-'

Ma fonction est comme ca :

function recursive($path,$count)
{
    $files = scandir($path);
    foreach ($files as $value)
    {
        
        $absolutePath = "$path/$value";
         
        if (is_dir($absolutePath))
        {	
			$count++;
			$array = explode('/',$absolutePath);
			$result=count($array);
			$result--;
			echo '<img src="img/lol.png" data-target="#div-'.$count.'" />&nbsp;&nbsp;'.$array[''.$result.''].'';
			recursive($absolutePath,$count);
        }
        elseif (is_file($absolutePath))
        {
			$name= basename($absolutePath);
            echo '<a href="lul.php?a='.$absolutePath.'">'.$name.'</a>';
        }
    }
	return $count;
}


Je la call comme ça :

recursive($variable,$count);


A l'intérieure d'une condition.

Mais le script passe de cette condition a une autre (c'est une boucle avec deux conditions) et quand il repasse dans la première condition qui appelle la fonction et bin $count reprend toujours la valeur 0 alors que je lui returne bien normalement

Je définie aussi $count dans la boucle avant les deux conditions :
$count= isset($count) ? $count : 0;


Ou est ce que ça foire ?