Pourquoi il est impossible de ne récupérer que le dernier élément de mon Array quand les éléments sont inférieurs à 5 ?

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 : Pourquoi il est impossible de ne récupérer que le dernier élément de mon Array quand les éléments sont inférieurs à 5 ?

Re: Pourquoi il est impossible de ne récupérer que le dernier élément de mon Array quand les éléments sont inférieurs à

par Spols » 19 sept. 2022, 10:53

Sans tout connaitre de ton appli, j'ai pas tout compris mais je dirai que :
$objectString=$this->recurseMenu($items,$bufferLimit);
devrait être
$objectString.=$this->recurseMenu($items,$bufferLimit);

et
function recurseMenu($items,$bufferLimit) {
devrait avoir un return $objectString; à la fin.

Pourquoi il est impossible de ne récupérer que le dernier élément de mon Array quand les éléments sont inférieurs à 5 ?

par chegmarco » 18 sept. 2022, 07:34

Bonjour.

J'ai un problème pour afficher tout les éléments d'un tableau quand le nombre d'éléments du tableau est inférieur à 5.

Code : Tout sélectionner

function toString(){ $objectString=''; $items=$this->children; $bufferLimit=(count($items)==0)?1:$this->getBufferLimit(); /* echo "<pre>"; print_r($this->recurseMenu($items,$bufferLimit)); echo "</pre>"; */ do { $bufferLimit-=1; $objectString=$this->recurseMenu($items,$bufferLimit); } while(strlen($objectString>160)); $this->index=$bufferLimit; return $objectString; } function getBufferLimit() { $len = count($this->children); $margin = $len-$this->index; if($margin<5) return $this->index+$margin; else return $this->index+5; //Permet de définir le Nombre de Menu à afficher au niveau de l'index "/ussd/receiver.php" dont le Menu est "/ussd/MyTree.php". } function recurseMenu($items,$bufferLimit) { $objectString="<strong>". $this->getTitle() . "</strong>" . PHP_EOL; $lastMenu=false; // var_dump($items); //DEBUG "items" if(count($items)>0) { for ($i = $this->index; $i <= $bufferLimit; $i++) { if ($items[$i]) { $item = $items[$i]; echo "<pre>"; print_r($i); echo "</pre>"; echo "<pre>"; print_r($item); echo "</pre>"; $num = $i + 1; // get node by name $userSessions = $_SESSION['userSessions']; $currUserSession = $userSessions[$this->address]; $node = $currUserSession->getNode($item); $title = $node->getTitle(); $objectString .= PHP_EOL . $num . '. ' . $title; } }


Le problème c'est que quand $margin<5 dans la fonction getBufferLimit, le debug de la variable $item n'affiche que le dernier élément du tableau $items.

Pourquoi donc ce bug d'affichage du dernier élément UNIQUEMENT lorsque les items sont inférieurs à 5 ???

J'ai tourné dans tous les sens sans vraiment comprendre ce qui créé ce Bug.
Veuillez m'aider s'il vous plaît à récupérer tous les "items" même quand le nombre d'items est inférieurs à 5.