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
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

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

    Informations forums :
    Inscription : janvier 2020
    Messages : 4
    Points : 5
    Points
    5
    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
    Modérateur
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    mars 2004
    Messages
    5 837
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : mars 2004
    Messages : 5 837
    Points : 15 951
    Points
    15 951
    Billets dans le blog
    10
    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"),
    # Dans la Création, tout est permis mais tout n'est pas utile...

  3. #3
    Modérateur
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    mars 2004
    Messages
    5 837
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : mars 2004
    Messages : 5 837
    Points : 15 951
    Points
    15 951
    Billets dans le blog
    10
    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']);
    # Dans la Création, tout est permis mais tout n'est pas utile...

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

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

    Informations forums :
    Inscription : janvier 2020
    Messages : 4
    Points : 5
    Points
    5
    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