[RESOLU] Lire des tableaux de tableaux en boucle

Eléphanteau du PHP | 31 Messages

20 avr. 2016, 11:32

C'est un mauvais exemple... il n'y aura que des parties variable!

Mammouth du PHP | 1967 Messages

20 avr. 2016, 11:33

EDIT :
Je viens de voir ton message,
Il semble y avoir un problème avec la détermination de l'index à la ligne précédente.
Je pense avoir oublié de diviser $i par $index et d'en prendre l'entier inférieure
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Mammouth du PHP | 1967 Messages

20 avr. 2016, 11:35

C'est un mauvais exemple... il n'y aura que des parties variable!
Avec qu'une partie fixe en début de phrase, tu peux la stocker dans une simple variable et l'afficher en début de phrase à chaque fois
alors le temp_index peut être omis et la fusion et classement de tableaux aussi

Mais pour mon message précédent il faut en tenir compte
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 31 Messages

21 avr. 2016, 11:47

Re!
Apres plusieurs tentatives je ne trouve pas comment diviser $i par $index et récupérer l'entier inférieur.
$final_index = floor (variant_mod ($i, $index));
Je cherche peut être trop compliqué..?

Mammouth du PHP | 1967 Messages

21 avr. 2016, 15:25

= floor($i/$index);
Cela devrait suffire
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 31 Messages

21 avr. 2016, 15:51

Il m'affiche une erreur a chaque boucle :" Undefined offset : 6 on line 57 ", " Undefined offset : 7 on line 57 " ... :
$final_tab = $spinning->results;
$tab = array();
foreach ($final_tab as $all) {
     $tab[] = sizeof($all);
}
for ($i = 0; $i < array_product($tab); $i++) {
     $remplacement = array();
     foreach ($tab as $cle => $taille) {
         $index = array_product(array_slice($tab, $cle + 1));
         $final_index = floor($i / $index);
         $remplacement[2 * $cle + 1] = $final_tab[$cle][$final_index]; <-------------
     }
     $phrase = array_merge($remplacement);
     ksort($phrase);
     $phrase = implode($phrase, ' ');
     echo $phrase;
}
Je me suis certainement lancé dans quelque chose de trop compliqué pour mon niveau mais j'aimerai vraiment réussir a finir ça avant de passé a quelque chose de plus abordable..!

Mammouth du PHP | 1967 Messages

21 avr. 2016, 16:54

Quand je suis confronté à un problème similaire, j'utilise souvent excel pour m'aider
Prenons ton cas pratique, "J'ai {manger|croquer|jeté|fini} {les gâteaux|les bonbons|la tarte|le chien} {chez moi|chez toi|chez lui|chez nous|chez vous|chez le président}"
Il y a 4, 4 et 6 possibilité donc 96 phrases à construire
tes index vont de 0 à 3 et de 0 à 5
je construit donc un tableau excel de 96 ligne qui contiendront mes index avec aucune ligne similaire
la dernière colonne change à chaque fois
l'avant dernière colonne change tous les 6 lignes
et la première change toute les 4*6 = 24 lignes
Ensuite je vais me demander comment faire une formule dans chaque colonne pour obtenir le bonne index
en dernière colonne, ligne()%6 (opérateur modulo) fonctionne très bien
en avant dernière, floor(ligne()/6)%4
et en première floor(ligne()/24)%4
On peut remarquer qu'en dernière ligne, floor(ligne()/1)%6 fonctionne aussi bien
Nous avons donc 2 chiffres à chaque fois qu'il faut déterminer avant de calculer l'index du tableau
le premier correspond à la multiplication des tailles des tableaux suivants c'est ce que je calculais avec
$index = array_product(array_slice($tab, $cle + 1));
Il faudrait cependant vérifié qu'il vaut bien 1 pour le dernier tableau (sinon tu auras une jolie erreur de division par zero
Le second correspond simplement à la taille du tableau courant
$final_tab = $spinning->results;
$debut = "j'ai ";
$tab = array();
foreach ($final_tab as $all) {
     $tab[] = sizeof($all);
}
for ($i = 0; $i < array_product($tab); $i++) {
     $remplacement = array();
     foreach ($tab as $cle => $taille) {
         $index = array_product(array_slice($tab, $cle + 1));
         $final_index = floor($i / $index)%$taille;
         $remplacement[] = $final_tab[$cle][$final_index]; <-------------
     }
     $phrase = implode($phrase, ' ');
     echo $debut.$phrase;
}
Je viens de reprendre ton problème du début, je remarque donc que mes explications précédentes était incomplète mais j'ai repris tout mon cheminement intelectuel. Je t'invite à ouvrir un tableur et faire le même exercice que moi. Tu remarquera peut être que les lignes du tableur commence par 1 et non 0 qu'il faut donc un peu ruser pour s'en sortir.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 31 Messages

22 avr. 2016, 09:10

Merci!

Testé & approuvé!!!

En testant il m'affiché encore une erreur mais il manquait juste :
$phrase = array_merge($remplacement);
Maintenant que ça marche je vais pouvoir essayer de bien comprendre son fonctionnement!

Merci encore pour ton aide ;)

Mammouth du PHP | 1967 Messages

22 avr. 2016, 13:44

Une fois que tu auras compris, tu devrait te rendre compte que
$phrase = array_merge($remplacement);
contient une fonction parfaitement inutile
que $remplacement devrait tout de suite être remplacer par $phrase et utiliser un string que tu concatène à chaque itération plutot qu'une array que tu fini par imploder.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube