Partage
  • Partager sur Facebook
  • Partager sur Twitter

rendre code php dynamique

trouver un offset de façon dynamique

    16 septembre 2020 à 15:37:14

    Bonjour  à tous, 

    Je souhaite créer une liste de régions dynamiquement, et la trier par ordre alphabétique, à une exception près. Pour gérer l'exception, j'utilise les fonctions array_slice et array_merge.

    Voici le tableau sur lequel je travaille :

    print_r($tabRegion);
    
    Array ( [Auvergne] => 5 [Bourgogne] => 1 [Bretagne] => 15 [Centre] => 4 [Ile-de-France] => 1 [Languedoc-Roussillon] => 2 ) 

    Et voici le tableau re-ordonné pour que la région Bretagne soit affichée en premier :

    		foreach ($tabRegion as $key => $value){
    
    			if ($key !== "Bretagne") {
    				$current = next($tabRegion);
    			} else {
    				$current = current($tabRegion);
    
    				$tab1 = (array_slice($tabRegion, 0, 2));
    				$tab2 = (array_slice($tabRegion, 2, 1));
    				$tab3 = (array_slice($tabRegion, 3));
    
    				$tabRegion = array_merge($tab2, $tab1, $tab3);
    				var_dump($tabRegion);                             
    			}
    		}

    Et j'obtiens le tableau suivant : 

    Array ( [Bretagne] => 15 [Auvergne] => 5 [Bourgogne] => 1 [Centre] => 4 [Ile-de-France] => 1 [Languedoc-Roussillon] => 2) 

    Bon, c'est exactement ce que je veux obtenir. Le problème est le suivant : j'ai indiqué les offsets de la fonction array_slice manuellement. J'aimerais les gérer dynamiquement, de façon à ce que quand le nombre de région est modifié, la coupure se fasse toujours sur la clé Bretagne. 

    En d'autres termes, je voudrais que l'offset soit générer automatiquement à l'emplacement de l'élément [ Bretagne => 15 ].

    Est-ce qu'il est possible de faire cela avec php7 ? Sinon, comment obtenir dynamiquement un tableau avec l'ordre modifié à partir de la clé ? 

    Merci pour votre aide !



    -
    Edité par IannAnAod 16 septembre 2020 à 15:39:53

    • Partager sur Facebook
    • Partager sur Twitter
      16 septembre 2020 à 15:46:48

      Ca me paraît compliqué et surtout pas fiable ton code parce que ça se base sur la position.

      $tabRegion = array_merge(['Bretagne' => NULL], $tabRegion);

      Il suffit de jouer avec le fonctionnement interne de PHP : les clés sont ordonnées par ordre d'insertion, donc tu crées un nouveau tableau où tu ne mets que Bretagne et tu merges ton tableau. Comme Bretagne était déjà présent, il est et reste premier.

      PS : il faut voir d'où vient le tableau au départ aussi, parce que si c'est le résultat d'une requête SQL, tu es censé faire ça par la clause ORDER

      -
      Edité par julp 16 septembre 2020 à 15:59:24

      • Partager sur Facebook
      • Partager sur Twitter
        16 septembre 2020 à 16:53:33

        Merci pour ta réponse !

        En effet, ça fonctionne. C'est moi qui ait mal compris les subtilités de array_merge. C'est plus clair avec ton code, et plus fiable!!

        Pour le moment le tableau n'est pas générer par la bdd, mais j'y penserais pour l'évolution du site...

        • Partager sur Facebook
        • Partager sur Twitter

        rendre code php dynamique

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown