IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Découper un tableau ; offset(s) et length provenant d'autres tableaux [PHP 5.2]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 17
    Par défaut Découper un tableau ; offset(s) et length provenant d'autres tableaux
    Bonjour,

    J'ai un petit souci de conception. Mon petit cerveau n'arrive pas à percer l'énigme suivante.

    J'ai un tableau que je souhaite découper en plusieurs autres tableaux.
    Le nombre de tableaux résultats sera variable.
    Pour ce faire, j'ai pensé passer par la fonction array_slice($array, offset, length).
    Pour déterminer les paramètres l'offset et length, j'ai deux autres tableaux. Un premier tableau avec les indices de fin de découpe et un tableau avec les indices de début de découpe.

    Ainsi, par exemple, j'ai les tableaux suivants :

    Détail du tableau des indices de fin de découpe :
    Clé : 0 <> Valeur : 3
    Clé : 1 <> Valeur : 6
    Clé : 2 <> Valeur : 10

    Détail du tableau des indices de début de découpe :
    Clé : 0 <> Valeur : 0
    Clé : 1 <> Valeur : 4
    Clé : 2 <> Valeur : 7


    Je tourne autour depuis hier matin et je m'en arrache les cheveux. Chaque fois que j'ai la sensation de comprendre le problème et que j'écris le code, je m'aperçois que je fais fausse route.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    // J'inscris ici les variables des tableaux que j'utilise car elles sont déclarées ailleurs
    // dans le code mais le fichier php est un peu long et comme tout le reste fonctionne...
    $tableauPremiersIndices as $clePI => $valeurPI
    $tableauDerniersIndices as $cleDI => $valeurDI
     
    for($a = 1; $a == count($tableauDerniersIndices);  $a++)
    {
    	foreach($tableauOrigine as $cleTO => $valeurTO)
    	{
    		for($i = 0; $cleTO == $valeurTDI[$i];  $i++)
    		{
    			${"tableauResultat".$a} = array_slice($tableauOrigine, $valeurTPI[$i], $valeurTDI[$i] - $valeurTPI[$i]);
    		}
    	}
    }
    Mon code est faux... j'en suis bien conscient... Quelqu'un peut-il m'aider à résoudre ce problème ?

    Merci par avance,

    Leauh

  2. #2
    Membre chevronné Avatar de sohnic
    Femme Profil pro
    bioinfo
    Inscrit en
    Mai 2003
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : bioinfo

    Informations forums :
    Inscription : Mai 2003
    Messages : 428
    Par défaut
    Bonjour,
    Je ne sais pas si le problème ne vient que de là, mais déjà, ça c'est faux.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    for($a = 1; $a == count($tableauDerniersIndices);  $a++)
    à remplacer par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    for($a = 1; $a <= count($tableauDerniersIndices);  $a++)
    Le deuxième for me semble douteux aussi...

    Sohnic

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 17
    Par défaut
    Bonjour Sohnic,

    Je ne comprends pas pourquoi il faut limiter $a par un inférieur ou égal plutôt qu'un "égal". Je cherche à obtenir x tableaux. Ces "x" tableaux auront donc chacun un indice de début et un indice de fin, soit un total de "x" indices de début et "x" indices de fin. Il faut donc que $a prenne "x" valeurs différentes et non "x-1" valeurs différentes... je ne comprends pas bien.

    Par contre, j'ai l'impression que ma deuxième boucle, le foreach, est tout simplement superflu en fait... Je vais travailler dans ce sens.

    Toute observation et/ou solution reste plus que jamais bienvenue... sinon, je vais ruminer ça tout le week-end...

    Merci encore à tous

    Leauh

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 17
    Par défaut
    Citation Envoyé par Leauh (un idiot) Voir le message
    Bonjour Sohnic,
    Je ne comprends pas pourquoi il faut limiter $a par un inférieur ou égal plutôt qu'un "égal". Je cherche à obtenir x tableaux. Ces "x" tableaux auront donc chacun un indice de début et un indice de fin, soit un total de "x" indices de début et "x" indices de fin. Il faut donc que $a prenne "x" valeurs différentes et non "x-1" valeurs différentes... je ne comprends pas bien.
    Leauh
    Bon, alors, j'ai fais un petit test et en fait, ça marche déjà un peu mieux si je change le signe "strictement égal à" par un signe "plus petit ou égal à".
    Oui, bon, il fallait que je relise un peu mes documents avant de répondre...

    Bisous Sohnic.

    Leauh

  5. #5
    Membre chevronné Avatar de sohnic
    Femme Profil pro
    bioinfo
    Inscrit en
    Mai 2003
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : bioinfo

    Informations forums :
    Inscription : Mai 2003
    Messages : 428
    Par défaut
    le deuxieme argument du for dit : tant que la condition est remplie, on continue.

    Dans tont cas : tant que $a n'a pas atteint sa valeur maximale (le count...), donc tant qua $a<=count..., on continue.

    Toi tu lui dis : tant que $a vaut cette valeur maximale (ce qui n'est pas le cas au premier tour de boucle), on continue. Comme ça n'est pas le cas, dès le premier tour... on s'arrete là.

    Sohnic

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 17
    Par défaut
    Bonjour à tous,

    Ouf ! Mon week-end est sauvé !

    Je viens de finir le code qui fonctionne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $tableauPremiersIndices as $clePI => $valeurPI
    $tableauDerniersIndices as $cleDI => $valeurDI
     
    for($a = 1; $a <= count($tableauDerniersIndices);  $a++)
    {
    	$i = $a - 1
    	${"tableauResultat".$a} = array_slice($tableauOrigine, $tableauPremiersIndices[$i], $tableauDerniersIndices[$i] - $tableauPremiersIndices[$i] + 1);
    }
    Les erreurs étaient donc :
    - la condition de la première boucle "for" (merci sohnic)
    - la présence perturbatrice de la boucle "foreach" qui n'avait rien à faire là
    - la deuxième boucle "for" qui était mal écrite et que je remplace et simplifie par une déclaration de $i, indexée sur $a
    - l'utilisation des variable $valeurDI et $valeurPI pour récupérer les valeurs au lieu d'utiliser les variables tableau...

    Je pensais que la réponse était bien plus compliquée et j'ai cherché très loin. D'où le temps dingue que ça m'a pris... j'en reviens pas.

    Merci encore pour votre aide et bon week-end à tous.

    Leauh

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Découper un tableau 3d
    Par labogea4 dans le forum LabVIEW
    Réponses: 2
    Dernier message: 23/01/2013, 16h29
  2. Réponses: 4
    Dernier message: 01/11/2012, 11h57
  3. Réponses: 2
    Dernier message: 20/07/2009, 12h24
  4. Découper un tableau par tranche
    Par zejo63 dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 01/08/2007, 11h36
  5. Découper un tableau en deux
    Par cryptorchild dans le forum Langage
    Réponses: 4
    Dernier message: 29/01/2006, 00h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo