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 ?

Eléphant du PHP | 137 Messages

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.

Mammouth du PHP | 1822 Messages

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.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube