Tronquer un tableau array

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par poupilou, 27 Novembre 2017.

  1. poupilou
    poupilou WRInaute impliqué
    Inscrit:
    9 Février 2004
    Messages:
    778
    J'aime reçus:
    9
    Salut à tous,

    Voici mon code :
    Code:
    $ma_valeur = 1.23;
    $mes_data = = array(0.25,0.50,0.75,1.00,1.25,1.50,1.75,2.00,$ma_valeur);
    sort($mes_data);
    
    Je voudrais tronquer mon tableau comme ceci : array(0.75,1.00,1.23,1.25,1.50);

    C'est à dire ne garder que 2 valeurs à gauche et 2 valeurs à droite de ma valeur 1.23, comment faire cela ?

    Merci pour votre aide.
     
  2. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    8 955
    J'aime reçus:
    277
    http://php.net/manual/fr/function.array-splice.php

    SSI $ma_valeur unique:
    PHP:
    <span class="syntaxdefault"></span><span class="syntaxkeyword"><?</span><span class="syntaxdefault">php<br /><br />$ma_valeur&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">1.23</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">$mes_data&nbsp;</span><span class="syntaxkeyword">=&nbsp;array(</span><span class="syntaxdefault">0.25</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0.50</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0.75</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">1.00</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">1.25</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">1.50</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">1.75</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">2.00</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">$ma_valeur</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">sort</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$mes_data</span><span class="syntaxkeyword">);<br /><br /></span><span class="syntaxdefault">print_r</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">array_splice</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$mes_data</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">array_search</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$ma_valeur</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">$mes_data</span><span class="syntaxkeyword">)&nbsp;-&nbsp;</span><span class="syntaxdefault">2</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">5</span><span class="syntaxkeyword">));&nbsp;</span><span class="syntaxdefault"></span>
    https://ideone.com/kauFty
     
  3. poupilou
    poupilou WRInaute impliqué
    Inscrit:
    9 Février 2004
    Messages:
    778
    J'aime reçus:
    9
    Merci Spout, je ne connaissais pas cette fonction array_slice... elle est très pratique, ça marche parfaitement bien :D
     
  4. poupilou
    poupilou WRInaute impliqué
    Inscrit:
    9 Février 2004
    Messages:
    778
    J'aime reçus:
    9
    J'ai modifié un peu mon code précédent.

    J'ai rajouté une ligne supprimant les doublons dans le array avec la fonction array_unique et j'ai modifié mon tableau array qui est maintenant multi-dimensionnel, ça donne le code ci-dessous :

    Code:
    $ma_valeur = 1.23;
    $mes_data = array(
        0 => array("poids"=>0.25, "longueur"=>4, "largeur"=>2),
        1 => array("poids"=>0.50, "longueur"=>5, "largeur"=>2.5),
        2 => array("poids"=>0.75, "longueur"=>6, "largeur"=>2.8),
        3 => array("poids"=>1.00, "longueur"=>7, "largeur"=>3),
        4 => array("poids"=>1.25, "longueur"=>8, "largeur"=>3.5),
        5 => array("poids"=>1.50, "longueur"=>9, "largeur"=>3.9),
        6 => array("poids"=>1.75, "longueur"=>10, "largeur"=>4.3),
        7 => array("poids"=>$ma_valeur, "longueur"=>7.2, "largeur"=>3.2),
    );
    sort($mes_data);
    $data = array_unique($mes_data);
    print_r(array_splice($data, array_search($ma_valeur, $data) - 2, 5));
    
    Ce code ne marche pas :(

    A priori, la fonction array_unique ne fonctionne pas pour les tableaux multi-dimensionnels.

    Comment faire avec ce tableau multi-dimensionnel pour obtenir la même résultat que précédemment tout en supprimant les éventuels doublons du array ?
     
  5. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    8 955
    J'aime reçus:
    277
  6. poupilou
    poupilou WRInaute impliqué
    Inscrit:
    9 Février 2004
    Messages:
    778
    J'aime reçus:
    9
    Merci Spout pour ton aide.

    J'ai été obligé de passer par 2 fonctions php pour contourner le array_unique (on ne peut pas supprimer les doublons avec cette fonction dans un tableau multi-dimensionnel) et le array_column (disponible à partir de PHP 5.5 et j'ai PHP 5.3.3), ce qui donne le code ci-dessous :
    Code:
    // Fonction qui supprime les doublons dans un tableau multi-dimensionnel
    function unique_multidim_array($array, $key) { 
        $temp_array = array(); 
        $i = 0; 
        $key_array = array(); 
        
        foreach($array as $val) { 
            if (!in_array($val[$key], $key_array)) { 
                $key_array[$i] = $val[$key]; 
                $temp_array[$i] = $val; 
            } 
            $i++; 
        } 
        return $temp_array; 
    } 
    // Fonction qui recherche une valeur dans un tableau multi-dimensionnel
    function searchArrayKeyVal($sKey, $id, $array) {
       foreach ($array as $key => $val) {
           if ($val[$sKey] == $id) {
               return $key;
           }
       }
       return false;
    }
    
    $ma_valeur = 0.67;
    $mes_data = array(
        array('poids' => 0.25, 'longueur' => 4, 'largeur' => 2),
        array('poids' => 0.50, 'longueur' => 5, 'largeur' => 2.5),
        array('poids' => 0.75, 'longueur' => 6, 'largeur' => 2.8),
        array('poids' => 1.00, 'longueur' => 7, 'largeur' => 3),
        array('poids' => 1.25, 'longueur' => 8, 'largeur' => 3.5),
        array('poids' => 1.50, 'longueur' => 9, 'largeur' => 3.9),
        array('poids' => 1.75, 'longueur' => 10, 'largeur' => 4.3),
        array('poids' => $ma_valeur, 'longueur' => 5.2, 'largeur' => 2.6)
    );
    sort($mes_data);
    $data = unique_multidim_array($mes_data,'poids');
    $resultat = array_splice($data, searchArrayKeyVal("poids", $ma_valeur, $data) -2, 5);
    print_r($resultat);
    
    Et là ça marche parfaitement bien :D
     
  7. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    8 955
    J'aime reçus:
    277
    Houlà il est grandement temps de passer à PHP 7.x
     
Chargement...
Similar Threads - Tronquer tableau array Forum Date
Smarty / Presta tronquer une variable depuis le début Développement d'un site Web ou d'une appli mobile 16 Mars 2015
Tronquer les descriptions du flux rss de Freeglobes Développement d'un site Web ou d'une appli mobile 15 Janvier 2010
Tronquer les descriptions d'un flux rss sous magpierss ? Développement d'un site Web ou d'une appli mobile 30 Août 2009
Filtre widget tableau de bord dans Google Analytics Google Analytics 18 Février 2020
Afficher/cacher données dans un tableau Développement d'un site Web ou d'une appli mobile 9 Mars 2019
Tri tableau array en PHP Développement d'un site Web ou d'une appli mobile 26 Février 2019
créer un site qui regroupe les tableaux de bords personnalisés GA de mes sites web Google Analytics 13 Juin 2018
voir mon tableau de bord personnalisé google analytics dans l'appli mobile Google Analytics 7 Juin 2018
Tableau html responsive Développement d'un site Web ou d'une appli mobile 6 Novembre 2017
Exécution requête sur bouton sur une ligne tableau Administration d'un site Web 5 Juillet 2017
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice