IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[PHP] Recherche multiple dans un tableau deux dimensions [PHP 7]


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2020
    Messages : 5
    Points : 6
    Points
    6
    Par défaut [PHP] Recherche multiple dans un tableau deux dimensions
    Bonjour,

    Je voudrais pouvoir faire des recherches variable dans un tableau deux dimensions.
    je m'explique.

    J'ai un tableau dans cette forme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?php
      $table = array(
            0 => array("nom" => "marc", "prenom", "jule", "age" => "23", "id" => "W24"),
            1 => array("nom" => "stephane", "prenom", "paul", "age" => "25", "id" => "W25"),
            2 => array("nom" => "loic", "prenom", "julie", "age" => "21", "id" => "W26"),
            3 => array("nom" => "mathieu", "prenom", "sarah", "age" => "23", "id" => "W27"),
            4 => array("nom" => "luc", "prenom", "audrey", "age" => "25", "id" => "W28"),
            5 => array("nom" => "loic", "prenom", "jule", "age" => "23", "id" => "W29")
      );
    ?>
    J'ai également un formulaire de recherche qui fonctionne avec la méthode post.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <form method="POST">
      <input type="text" name="nom" />
    <input type="text" name="prenom" />
    <input type="text" name="age" />
    <input type="text" name="ref" />
    </form>
    dans ce style là.

    Par exemple si je fait une recherche sur l'age, j'aimerais qu'il me donnent l'id des tableau correspondant.

    dans un premier temps je me suis dis que je pourrais créer une autre variable avec une recherche avec array_search
    mais après multiple test je n'y suis pas arrivé

    Voici un petit test que j'ai effectué mais sans succès..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    <?php
    $table = array(
            0 => array("nom" => "marc", "prenom", "jule", "age" => "23", "id" => "W24"),
            1 => array("nom" => "stephane", "prenom", "paul", "age" => "25", "id" => "W25"),
            2 => array("nom" => "loic", "prenom", "julie", "age" => "21", "id" => "W26"),
            3 => array("nom" => "mathieu", "prenom", "sarah", "age" => "23", "id" => "W27"),
            4 => array("nom" => "luc", "prenom", "audrey", "age" => "25", "id" => "W28"),
            5 => array("nom" => "loic", "prenom", "jule", "age" => "23", "id" => "W29")
          );
     
          foreach ($table as $key => $value) {
            $table_schearch[] = array_search("marc", array_column($table[$key], 'nom'));
            $table_schearch[] = array_search("25", array_column($table[$key], 'age'));
            $table_schearch[] = array_search("stephane", array_column($table[$key], 'nom'));
          }
          $table_schearch = array_unique($table_schearch);
          debug($table);
          debug($table_schearch);
    ?>

    Auriez vous une solution plus simple et plus efficaces ?
    en sachant que dans mon véritable tableau j'ai une histoire de 50 recherches différente possible.

    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    salut,

    je pense qu'il y a une erreur dans tes données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    0 => array("nom" => "marc", "prenom", "jule", "age" => "23", "id" => "W24"),
    doit être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    0 => array("nom" => "marc", "prenom" => "jule", "age" => "23", "id" => "W24"),

  3. #3
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Tiens une soluce avec filtre variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    $table = array(
        0 => array("nom" => "marc", "prenom" => "jule", "age" => "23", "id" => "W24"),
        1 => array("nom" => "stephane", "prenom" => "paul", "age" => "25", "id" => "W25"),
        2 => array("nom" => "loic", "prenom" => "julie",  "age" => "21", "id" => "W26"),
        3 => array("nom" => "mathieu", "prenom" => "sarah", "age" => "23", "id" => "W27"),
        4 => array("nom" => "luc", "prenom" => "audrey", "age" => "25", "id" => "W28"),
        5 => array("nom" => "loic", "prenom" => "jule", "age" => "23", "id" => "W29")
    );
     
    $search_ids = function(array $search) use ($table): array {
        $ids = [];
        $nb  = count($search);
        foreach ($table as $k => $v) {
            if (count(array_intersect_assoc($v, $search)) === $nb) {
                $ids[] = $k;
            }
        }
        return $ids;
    };
     
    $s1 = $search_ids(['nom' => 'marc']);
    $s2 = $search_ids(['prenom' => 'jule']);
    $s3 = $search_ids(['prenom' => 'jule', 'age' => '23']);
    $s4 = $search_ids(['prenom' => 'jule', 'age' => '23', 'id' => 'W29']);

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2020
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Merci beaucoup,
    Je pense que ce code va beaucoup m'aider.
    reste plus cas l'adapter a mon utilisation

    Et oui j'avais fait une erreur dans mon exemple :p
    Merci de me l'avoir fait remarquer

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mettre un fichier csv dans un tableau à deux dimensions
    Par neeux dans le forum Général Python
    Réponses: 5
    Dernier message: 05/03/2007, 17h36
  2. Réponses: 6
    Dernier message: 25/02/2007, 18h56
  3. Réponses: 9
    Dernier message: 05/01/2007, 21h04
  4. Rechercher dans un tableau deux dimensions
    Par angelevil dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 28/09/2006, 21h29
  5. tri alphabétique dans un tableau deux dimensions
    Par *!!cocco!!* dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 06/12/2004, 22h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo