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:
    642
    J'aime reçus:
    2
    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 733
    J'aime reçus:
    233
    $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:
    642
    J'aime reçus:
    2
    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 062
    J'aime reçus:
    108
    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:
    642
    J'aime reçus:
    2
    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 062
    J'aime reçus:
    108
    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:
    642
    J'aime reçus:
    2
    Un grand merci pour ton aide, ça marche nickel ;)
     
  8. colonies
    colonies WRInaute occasionnel
    Inscrit:
    10 Septembre 2006
    Messages:
    440
    J'aime reçus:
    36
    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 062
    J'aime reçus:
    108
    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:
    440
    J'aime reçus:
    36
    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
Avis sur la vitrine de Lydia Salou Artiste Peintre Demandes d'avis et de conseils sur vos sites Samedi à 02:36
Plugin d'avis Tripadvisor et contenu dupliqué Débuter en référencement 26 Juillet 2019
Rédactrice Française expatriée : la qualité sans les prix exagérés ! Rédaction web et référencement 28 Mai 2019
Echange de lien triangulaire, tf cf dr faible.... Débuter en référencement 24 Mai 2019
Echange de lien triangulaire avec site générant du trafic mais cf tf et dr peu élevé...? Netlinking, backlinks, liens et redirections 16 Mai 2019
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice