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:
    686
    J'aime reçus:
    6
    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:
    8 840
    J'aime reçus:
    248
    $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:
    686
    J'aime reçus:
    6
    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:
    1 227
    J'aime reçus:
    145
    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:
    686
    J'aime reçus:
    6
    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:
    1 227
    J'aime reçus:
    145
    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:
    686
    J'aime reçus:
    6
    Un grand merci pour ton aide, ça marche nickel ;)
     
  8. colonies
    colonies WRInaute occasionnel
    Inscrit:
    10 Septembre 2006
    Messages:
    491
    J'aime reçus:
    55
    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:
    1 227
    J'aime reçus:
    145
    Parce qu'il veut que si ça ne trouve pas, ça prenne la première valeur supérieure.
     
  10. colonies
    colonies WRInaute occasionnel
    Inscrit:
    10 Septembre 2006
    Messages:
    491
    J'aime reçus:
    55
    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
Ne prendre qu'une partie d'un QueryString dans une regex RewriteCond URL Rewriting et .htaccess Lundi à 12:09
WordPress attributs de woocommerce Développement d'un site Web ou d'une appli mobile 4 Novembre 2019
L'attribut data-nosnippet pour interdire des textes dans les snippets Référencement Google 26 Septembre 2019
Indexation, pagination : comment gérer les URL de tri des colonnes ? Crawl et indexation Google, sitemaps 24 Septembre 2019
Attributs rel=sponsored et rel=ugc en plus de rel=nofollow Référencement Google 11 Septembre 2019
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice