[RESOLU] Lire des tableaux de tableaux en boucle

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] Lire des tableaux de tableaux en boucle

Re: [RESOLU] Lire des tableaux de tableaux en boucle

par Spols » 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.

Re: Lire des tableaux de tableaux en boucle

par psik4d3lik » 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 ;)

Re: Lire des tableaux de tableaux en boucle

par Spols » 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.

Re: Lire des tableaux de tableaux en boucle

par psik4d3lik » 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..!

Re: Lire des tableaux de tableaux en boucle

par Spols » 21 avr. 2016, 15:25

= floor($i/$index);
Cela devrait suffire

Re: Lire des tableaux de tableaux en boucle

par psik4d3lik » 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é..?

Re: Lire des tableaux de tableaux en boucle

par Spols » 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

Re: Lire des tableaux de tableaux en boucle

par Spols » 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

Re: Lire des tableaux de tableaux en boucle

par psik4d3lik » 20 avr. 2016, 11:32

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

Re: Lire des tableaux de tableaux en boucle

par Spols » 20 avr. 2016, 11:26

Je suis parti du principe que ta phrase se structure comme ceci
[partie fixe][partie variable][partie fixe][partie variable]...
Les parties variables pouvant être vide.
les parties fixes ont donc un index 0,2, 4, ... soit les paires
Les parties variables ont les index 1, 3, 5, ... soit les impaires
Le code va donc créer un tableaux rien qu'avec des index impaires afin d'ensuite mélanger avec le tableaux des partie fixes (encore à créer) qui n'a que des index paires

Pour ton erreur, il faut peut être créer l'index avant de l'utiliser
$temp_cle = 2 * $cle + 1;
$remplacement[$temp_cle] = $final_tab[$cle][$index];

Re: Lire des tableaux de tableaux en boucle

par psik4d3lik » 20 avr. 2016, 11:17

Bonjour!
Quand je teste avec cette phrase :
"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}"
et que j'envoie il m'affiche :

Notice: Undefined offset: 24 in C:\ ... on line 56
Notice: Undefined offset: 6 in C:\ ... on line 56
chez toi

Je ne comprend pas pour quoi il m'indique 2 erreurs et m'affiche "chez toi"
Array (
[0] => Array ( [0] => manger [1] => croquer [2] => jeté [3] => fini )
[1] => Array ( [0] => les gâteaux [1] => les bonbons [2] => la tarte [3] => le chien )
[2] => Array ( [0] => chez moi [1] => chez toi [2] => chez lui [3] => chez nous [4] => chez vous [5] => chez le président )
)

Re: Lire des tableaux de tableaux en boucle

par @rthur » 20 avr. 2016, 11:04

Bonjour,

Quelle est l'erreur ?

Re: Lire des tableaux de tableaux en boucle

par psik4d3lik » 20 avr. 2016, 10:56

Re!
Merci encore pour l'aide, mais j'ai une erreur que je n'arrive pas a comprendre sur cette ligne :
$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));
                    $remplacement[2 * $cle + 1] = $final_tab[$cle][$index];  <------------------------
                }
                $phrase = array_merge($remplacement);
                ksort($phrase);
                $phrase = implode($phrase, ' ');
                echo $phrase;
            }
Une idée?

Re: Lire des tableaux de tableaux en boucle

par psik4d3lik » 15 avr. 2016, 16:56

Merci encore!
Je vais tester ça.

Re: Lire des tableaux de tableaux en boucle

par Spols » 15 avr. 2016, 16:42

Finalement je conseille pas la fonction recursive.
en code non testé et écrit de mémoire
$master_tableau = $spinning->results;
$phrase_constante = array(0 => "J'ai");//Il faut créer ce tableau des parties constantes de ta phrase
$taille_tableaux = array();
foreach($master_tableau as $tableau) {
$taille_tableaux[] = sizeof($tableau);
}
for($i=0,$i< array_product($taille_tableaux),$i++) {
$remplacement = array();
foreach($taille_tableaux as $cle => $taille) {
$index = array_product(array_slice($taille_tableaux,$cle+1));
$remplacement[2*$cle+1] = $master_tableau[$cle][$index];
}
$phrase = array_merge($remplacement, $phrase_constante);
ksort($phrase);
$phrase = implode($phrase,'');
echo $phrase;
}
Le tableaux des constantes de ta phrase ne doit avoir que des index paires et dans l'ordre le début de la phrase, la partie entre les variable 1 et 2, la partie entre les variable 2 et 3, ... , la fin.
Je ne sais pas comment tu compte récupèrer les parties constantes, alors je te laisse cela en exercice