[Symfony 2.8] Alogorithme pour parcourir tableau PHP

Fermé
patrice86 Messages postés 1380 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 17 décembre 2024 - Modifié par patrice86 le 14/03/2016 à 11:27
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 - 14 mars 2016 à 12:15
Bonjour,

Je développe une application sous Symfony 2 et j'utilise le bundle IvoryGoogleMapBundle : https://github.com/egeloen/IvoryGoogleMapBundle

Je dispose d'un tableau d'objet en php $fiches qui contient plusieurs objet Fiche.
Dans une fiche, j'ai notamment une méthode adresseToString() qui me retourne une adresse postale sous la forme d'une String.

Ce que je dois faire :
Je dois parcourir le tableau d'objet $fiches et pour chacun des objets Fiche trouvé, je dois utiliser la méthode suivante :
$response = $directions->route(ma_fiche_récupéré->adresseToString(), une_autre_fiche->adresseToString());


En fait, je veux pouvoir, pour chacun des objets Fiche, utiliser la méthode du dessus qui me permet de cherche un chemin. Le premier argument est l'adresse de départ (donc l'adresse de l'objet Fiche récupéré) et le second est l'adresse d'arrivée.
C'est pour l'adresse d'arrivée que j'ai un soucis. Je veux appeler cette méthode autant de fois qu'il y a d'objet fiche pour chacun des objets du tableau !

Exemple :
$fiches { [0] => Fiche {}, [1] => Fiche{}, [2] =>Fiche{}, [3] =>Fiche{} ]

Ici j'ai mon tableau d'objet avec des objets Fiche. je veux utiliser la méthode du dessus avec pour adresse de départ l'adresse de l'objet Fiche en position 0 et pour adresse d'arrivée l'adresse des objets Fiche en position 1,2,3 mais pas sa propre position (0)! (inutile de chercher un chemin pour aller d'un point au même point).

En gros, je dois effectuer la méthode du dessus 3 fois pour chacun des objets.
Le tout dans une boucle mais là je suis perdu sur l'algo.

Pas simple d'expliquer.
Merci de votre aide en tout cas.

Kévin
A voir également:

1 réponse

Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 526
14 mars 2016 à 11:35
Salut,

Un exemple de début de solution :
<?php
// tableau des fiches
$fiches = array('fiche0', 'fiche1', 'fiche2', 'fiche3');
$nbFiches = sizeof($fiches);

// si le tableau possède au moins 2 fiches
if ($nbFiches > 1) {
    // le départ est la fiche à l'index 0
    $depart = $fiches[0];
    
    for ($i = 1; $i < $nbFiches; $i++) {
        // on compare la fiche départ avec toutes les autres fiches du tableau
        $arrivee = $fiches[$i];
        echo 'compare ' . $depart . ' ' . $arrivee . '<br />';
    }
}


Bonne journée
0
patrice86 Messages postés 1380 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 17 décembre 2024 125
14 mars 2016 à 11:52
Bonjour

merci pour ta réponse.
Toutefois, j'ai déjà fait cette méthode mais ce n'est pas ce que je recherche.

Je veux que la fiche en position 0 utilise l'adresse de la fiche en position1 puis 2 puis 3
et on recommence, la fiche en position 1 utilise l'adresse de la fiche en position 0 puis 2 puis 3
etc, etc
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 526
14 mars 2016 à 12:15
Pour comparer tous les points un à un, tu peux ajouter une deuxième boucle et vérifier qu'on ne compare que les fiches différentes :
<?php
// tableau des fiches
$fiches = array('fiche0', 'fiche1', 'fiche2', 'fiche3');
$nbFiches = sizeof($fiches);

// si le tableau possède au moins 2 fiches
if ($nbFiches > 1) {
    for ($i = 0; $i < $nbFiches; $i++) {
    
        // le départ est la fiche à l'index 0
        $depart = $fiches[$i];
    
        for ($j = 0; $j < $nbFiches; $j++) {
            $arrivee = $fiches[$j];
            
            // on ne compare que les points différents
            if ($depart != $arrivee) {
                // on compare la fiche départ avec toutes les autres fiches du tableau
                echo 'compare ' . $depart . ' ' . $arrivee . '<br />';
            }
        }
    }
}
0