Tri tableau array en PHP

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par poupilou, 26 Février 2019.

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

    J'ai 2 array ci-dessous :
    Code:
    $headers1 = array('0','1','5','10','20','30','40','50','100','200','300','400','500');
    $headers2 = array('a','b','c',d','e','f','g','h','i','j','k','l','m','n');
    
    J'ai une variable php $nb = 400;

    Je voudrais afficher seulement 3 valeurs maximum des array $headers1 et $headers2 avant ma variable $nb et 3 valeurs maximum des array $headers1 et $headers2 après ma variable $nb, comment faire cela ?

    Si $ns = 400, ça devrait m'afficher les valeurs suivantes :
    100, 200, 300, 400, 500
    j, k, l, m, n

    Si $ns = 40, ça devrait m'afficher les valeurs suivantes :
    10, 20, 30, 40, 50, 100, 200
    d, e, f, g, h, i, j

    Si $ns = 0, ça devrait m'afficher les valeurs suivantes :
    0, 1, 5, 10
    a, b, c, d

    Merci pour votre aide.
     
  2. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 169
    J'aime reçus:
    346
    $headers2 n'a pas le même nombre d'éléments que $headers1, c'est normal ?
     
  3. poupilou
    poupilou WRInaute impliqué
    Inscrit:
    9 Février 2004
    Messages:
    935
    J'aime reçus:
    15
    Non, il doit avoir le même nombre.

    Le voici corrigé :
    Code:
    $headers2 = array('a','b','c',d','e','f','g','h','i','j','k','l','m');
     
  4. rick38
    rick38 WRInaute passionné
    Inscrit:
    23 Février 2013
    Messages:
    2 037
    J'aime reçus:
    352
    Je crois pas qu'il y ait de chose magique, donc je t'ai fait un code basique.
    Il y a une autre façon (prendre l'élément, puis remonter les 3 (max) précédents, puis descendre les 3 (max) suivants), peut-être plus courte je sais pas...

    PHP:
    $headers1 = ['0','1','5','10','20','30','40','50','100','200','300','400','500'];
    $headers2 = ['a','b','c''d','e','f','g','h','i','j','k','l','m'];

    $nb '400'// Exemple
    $index array_search($nb$headers1);

    if (
    $index !== false)
    {
        
    $first $index 3;
        
    $total $first $first 7;
        
    $ct count($headers1);

        
    $j 0;
        
    $h1 = [];
        
    $h2 = [];
        for (
    $i max($first0); $i $ct && $j $total$i++)
        {
            
    $h1[] = $headers1[$i];
            
    $h2[] = $headers2[$i];
            
    $j++;
        }

        echo 
    implode(', '$h1);
        echo 
    '<br>';
        echo 
    implode(', '$h2);
    }
     
    #4 rick38, 26 Février 2019
    Dernière édition: 26 Février 2019
  5. poupilou
    poupilou WRInaute impliqué
    Inscrit:
    9 Février 2004
    Messages:
    935
    J'aime reçus:
    15
    Absolument parfait, bravo :)

    Est-il possible d'apporter une petite modification ?

    Parfois le $nb ne sera pas un chiffre contenu dans $headers1, il faudrait donc sélectionner le premier chiffre dans $headers1 qui soit supérieur à $nb. Par exemple si $nb = 12 il faudrait sélectionner le chiffre 20 dans $headers1 ainsi que les 3 chiffres devant et après 20, comment faire ?
     
  6. rick38
    rick38 WRInaute passionné
    Inscrit:
    23 Février 2013
    Messages:
    2 037
    J'aime reçus:
    352
    Remplacer $index = array_search($nb, $headers1); par :

    PHP:
        $index false;
        foreach (
    $headers1 as $key => $value)
        {
            if (
    $value >= $nb)
            {
                    
    $index $key;
                    break;
            }
        }
     
  7. poupilou
    poupilou WRInaute impliqué
    Inscrit:
    9 Février 2004
    Messages:
    935
    J'aime reçus:
    15
    Un grand merci pour ton aide, ça marche nickel ;)
     
  8. colonies
    colonies WRInaute impliqué
    Inscrit:
    10 Septembre 2006
    Messages:
    675
    J'aime reçus:
    111
    Pourquoi ? C'était bien, array_search, non ?

    Ma version :
    PHP:
    $headers1 = ['0','1','5','10','20','30','40','50','100','200','300','400','500'];
    $headers2 = ['a','b','c''d','e','f','g','h','i','j','k','l','m'];

    get_slice(400$headers1$headers2);
    get_slice(40$headers1$headers2);
    get_slice(0$headers1$headers2);

    function 
    get_slice($nb$headers1$headers2)
    {
        
    $index array_search((string) $nb$headers1TRUE);
        if (
    $index === FALSE)
            return 
    FALSE;

        
    $first max($index 30);
        
    $length min($index 30);
     
        
    $sub1 array_splice($headers1$first$length);
        
    $sub2 array_splice($headers2$first$length);
     
        echo 
    implode(', '$sub1)
            . 
    '<br>'
            
    implode(', '$sub2)
            . 
    '<hr>';

        return [
    $sub1$sub2]; // par exemple.
    }
     
    #8 colonies, 28 Février 2019
    Dernière édition: 28 Février 2019
  9. rick38
    rick38 WRInaute passionné
    Inscrit:
    23 Février 2013
    Messages:
    2 037
    J'aime reçus:
    352
    Parce qu'il veut que si ça ne trouve pas, ça prenne la première valeur supérieure.
     
  10. colonies
    colonies WRInaute impliqué
    Inscrit:
    10 Septembre 2006
    Messages:
    675
    J'aime reçus:
    111
    Ah ouais, je n'avais pas lu sa réponse au-delà de "Absolument parfait" :-/

    Du coup, même modif pour ma version : ton bout de code pour remplacer :
    PHP:
        $index array_search((string) $nb$headers1TRUE);
        if (
    $index === FALSE)
            return 
    FALSE;
    En gros, la différence de ma version, c'est qu'elle utilise array_slice au lieu d'une boucle : c'est fait pour.
     
Chargement...
Similar Threads - Tri tableau array Forum Date
Trier un tableau en PHP Développement d'un site Web ou d'une appli mobile 9 Juin 2010
[RESOLU] probleme de tri descendant de tableau ... Développement d'un site Web ou d'une appli mobile 4 Avril 2010
Tris PHP sur tableaux multidimensionnels Développement d'un site Web ou d'une appli mobile 28 Février 2010
Trier un tableau par rapport à un autre Développement d'un site Web ou d'une appli mobile 5 Février 2010
Tri d'un tableau Développement d'un site Web ou d'une appli mobile 3 Novembre 2009
tri d'un tableau a 2 dimensions Développement d'un site Web ou d'une appli mobile 8 Janvier 2007
tri tableau Développement d'un site Web ou d'une appli mobile 4 Novembre 2006
Trier des données avec les tableaux Développement d'un site Web ou d'une appli mobile 31 Octobre 2006
[résolu] PHP-Trier un tableau en fonction d'un critére perso Développement d'un site Web ou d'une appli mobile 10 Juillet 2006
Comment trier en php un tableau multidimensionnel ? Développement d'un site Web ou d'une appli mobile 4 Mai 2006
PHP-Trier un tableau Développement d'un site Web ou d'une appli mobile 16 Avril 2006
Tableau PHP : trier en fonction des valeurs Développement d'un site Web ou d'une appli mobile 5 Mars 2006
trier les éléments d'un tableau Développement d'un site Web ou d'une appli mobile 26 Janvier 2006
XHTML 1.0 Strict et les tableaux Développement d'un site Web ou d'une appli mobile 5 Janvier 2006
[PHP] trier 2 tableaux Administration d'un site Web 23 Octobre 2003
Avis mytripmed.com/fr Demandes d'avis et de conseils sur vos sites 1 Août 2022
Nom de la ville dans l' attribut Alt Débuter en référencement 14 Mai 2022
CSS / Attribuer 2 couleurs différentes aux H2 Développement d'un site Web ou d'une appli mobile 12 Mars 2022
Site vitrine Google business.site Google : l'entreprise, les sites web, les services 10 Mars 2022
Redistribution du jus de la homepage et sitemap Débuter en référencement 8 Février 2022