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:
    904
    J'aime reçus:
    14
    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 194
    J'aime reçus:
    333
    $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:
    904
    J'aime reçus:
    14
    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 850
    J'aime reçus:
    289
    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:
    904
    J'aime reçus:
    14
    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 850
    J'aime reçus:
    289
    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:
    904
    J'aime reçus:
    14
    Un grand merci pour ton aide, ça marche nickel ;)
     
  8. colonies
    colonies WRInaute impliqué
    Inscrit:
    10 Septembre 2006
    Messages:
    615
    J'aime reçus:
    88
    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 850
    J'aime reçus:
    289
    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:
    615
    J'aime reçus:
    88
    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
Prise en compte des attributs de déclinaisons, sans faire du duplicate content e-commerce 29 Septembre 2021
Page "Actualités" sur site vitrine Rédaction web et référencement 27 Juillet 2021
WordPress GT Metrix : comment tester sa vitesse au mieux ? Débuter en référencement 27 Juillet 2021
Stratégie Back Link - B2B - Industriel / BTP Netlinking, backlinks, liens et redirections 8 Juillet 2021
Domaine .fr et expatriation Noms de domaine et référencement 8 Juillet 2021
Adsense plus strict avec le classement en contenu adulte ? AdSense 6 Juillet 2021
Template pour un site vitrine sous Wordpress? Seo Friendly Débuter en référencement 27 Mai 2021
Revenir dans le SEO apres 12 ans : meilleure option pour un petit site Vitrine? Débuter en référencement 25 Mai 2021
Stripe et les webhooks Développement d'un site Web ou d'une appli mobile 30 Mars 2021
Critères de tri en GET et budget crawl Référencement Google 25 Février 2021