2013-08-26 3 views
1

Vous avez eu des problèmes avec ces dernières heures. Essayer de construire une fonction de recherche pour un tableau puis cracher un nouveau contenant tous les tableaux qui ont un mot-clé.Recherche un tableau multidimensionnel pour la valeur et retourne un nouveau tableau

Voici la fonction avec laquelle je travaille, je ne suis pas sûr que ce soit dans la bonne direction ou pas, c'est de retourner des tableaux dans des tableaux, ce qui n'est pas ce que j'ai l'intention de faire.

function search_array($array, $needle) { 
    $results = array(); 
    $hasValue = false; 

    foreach ($array as $subarray) { 
     foreach($subarray as $value){ 
      if(strpos($value,$needle) !== false) 
       $hasValue = true; 
     } 
     if($hasValue = true) 
      $results[] = $array; 
    } 

    return $results; 
} 

tableau Je suis à la recherche est structuré comme suit:

Array 
(
    [0] => Array 
     (
      [ID] => 27 
      [title] => Steve Jobs 
      [balance] => $147 
      [paid_1] => $49 
      [date_1] => 26 August, 2013 
      [paid_2] => $49 
      [date_2] => 26 August, 2013 
      [paid_3] => $49 
      [date_3] => 26 August, 2013 
     ) 

    [1] => Array 
     (
      [ID] => 26 
      [title] => Bill Gates 
      [balance] => $300 
      [paid_1] => $100 
      [date_1] => 25 August, 2013 
      [paid_2] => $100 
      [date_2] => 25 August, 2013 
      [paid_3] => $100 
      [date_3] => 25 August, 2013 
     ) 

) 

Ce que je voudrais arriver est des données d'utilisation saisies à partir d'un formulaire de recherche et trouver des tableaux qui ont le mot-clé saisi. Par exemple la recherche de « Bill » retournerait un nouveau tableau et tout autre contenant des tableaux « Bill » structuré comme celui-ci:

Array 
(

    [0] => Array 
     (
      [ID] => 26 
      [title] => Bill Gates 
      [balance] => $300 
      [paid_1] => $100 
      [date_1] => 25 August, 2013 
      [paid_2] => $100 
      [date_2] => 25 August, 2013 
      [paid_3] => $100 
      [date_3] => 25 August, 2013 
     ) 

) 

J'ai lu quelques autres messages sur ici, faire quelque chose de similaire, en particulier celui-ci: How to search by key=>value in a multidimensional array in PHP ce qui semble proche, sauf que je voudrais seulement chercher par une valeur dans une chaîne et non par la clé. Toute aide est grandement appréciée.

Répondre

1

Votre fonction semble presque bien sauf:

  • Vous ne vérifie pas si la valeur est une chaîne avant d'appeler strpos sur elle
  • Vous affectez $ tableau dans votre résultat au lieu de $
  • sous-tableau
  • Vous ne réinitialisez pas la variable $ hasValue à false
  • Vous affectez la valeur boolean true à la variable $ hasValue dans votre instruction if à la fin, au lieu de la comparer à true.

Je crois que cela devrait fonctionner:

function search_array($array, $needle) { 
    $results = array(); 

    foreach ($array as $subarray) { 
     $hasValue = false; 
     foreach($subarray as $value){ 
      if(is_string($value) && strpos($value,$needle) !== false) 
       $hasValue = true; 
     } 
     if($hasValue) 
      $results[] = $subarray; 
    } 

    return $results; 
} 

Et une autre version qui vous évite de traverser tout le sous-tableau à chaque fois:

function search_array($array, $needle) { 
    $results = array(); 

    foreach ($array as $subarray) { 
     foreach($subarray as $value){ 
      if(is_string($value) && strpos($value,$needle) !== false) { 
       $results[] = $subarray; 
       break; 
      } 
     } 
    } 

    return $results; 
} 

Notez que si vous êtes à la recherche d'une correspondance exacte dans l'une des valeurs au lieu d'une sous-chaîne, vous pouvez utiliser la fonction array_search() à la place:

function search_array($array, $needle) { 
    $results = array(); 

    foreach ($array as $subarray) { 
     if (array_search($needle, $subarray, true) !== false) { 
      $results[] = $subarray; 
     } 
    } 

    return $results; 
} 
Questions connexes