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

  1. #1
    Futur Membre du Club
    [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
    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
    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
    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

###raw>template_hook.ano_emploi###