2017-08-25 19 views
0

Je dispose d'un fichier csv qui ouvre et lieux dans un tableauRecherche tableau multi-dimension pour une valeur qui correspond à

exemple de fichier csv:

Steven King, IT 

Ronald Dahl, BFG 

Charles Abbot, The island 

Donc cela crée mon tableau avec des clés différentes ect pour chaque artiste ect. J'ouvre mon fichier csv en utilisant le ci-dessous:

$file = fopen('./example.csv','r') or die("can't open file"); 
while (($line = fgetcsv($file, 1000)) !== false) { 
    $csv[] = $line; 
    } 
fclose($file) or die("can't close file"); 

Ce qui fonctionne très bien, mais je me bats pour rechercher tout le tableau pour toute valeur les recherches des utilisateurs pour; Mon formulaire publie la chaîne d'utilisateurs et recherche dans le tableau toute valeur correspondant à ce que l'utilisateur entre (non sensible à la casse). à savoir:

//gets the users input from form 
$user_string = $_POST['search_string']; 

permet de dire que l'utilisateur entre stephen ou île, im essayant de le faire pour rechercher le tableau csv $ pour toute valeur qui correspond ou contenir la chaîne et la sortie de toutes les valeurs sur cette touche. J'ai essayé using array_filter & preg_grep mais ne pas avoir beaucoup de chance.

Répondre

0

Je pense que vous avez besoin de la fonction de recherche de tableau pour confirmer lorsque vous créez le tableau $ cvs en boucle. Vous pouvez créer les résultats dans cette boucle. Voici un exemple.

<?php 

$file = fopen('example.csv', 'r') or die("can't open file"); 

$results = []; // it'll hide php notifications 

$searchword = $_POST['search_string']; 

while (($line = fgetcsv($file, 1000)) !== false) { 

    $found = false; 

    foreach ($line as $var => $val) { 
     if (stristr($val, $searchword) || stristr($var, $searchword)) { 
      $found = true; 
     } 
    } 

    if ($found == true) { 
     $results[] = $line; 
    } 
} 

fclose($file) or die("can't close file"); 

print_r($results); 
+0

Merci Mehmet, Im toujours avoir du mal à placer la ligne dans le tableau des résultats. c'est-à-dire qu'il imprime un tableau vide. Est-ce que je manque quelque chose? – Buzzy

+0

le fichier CVS est vrai? parce que c'est le début avec le point (.) –

+0

Désolé que c'était mon erreur, oui j'ai le chemin de fichier correct pour le fichier mais il ne va pas ajouter les valeurs au tableau de résultats, pas sûr si la fonction array_search() fonctionne. – Buzzy

0

Voici une approche fonctionnelle:

$f = array_filter($csv, function($cs) use($user_string){ foreach($cs as $c){return stristr($c,$user_string);}}); 

Puisque vous étiez en mesure de créer un tableau à partir de votre fichier csv, il suffit de passer ce tableau à array_filter puis boucle à travers chaque tableau en utilisant foreach et utiliser stristr pour renvoie toutes les valeurs correspondant à votre aiguille de recherche.

$arr = [ 
0 => [ 
    "name" => "Stephen King", 
    "movie" => "IT" 
    ], 
1 => [ 
    "name" => "Ronald Dahl", 
    "movie" => "BFG" 
    ], 
2 => [ 
    "name" => "Charles Abbot", 
    "movie" => "The Island" 
    ] 
]; 

$n = "Ron"; 

$f = array_filter($arr, function($ar) use($n){ foreach($ar as $a){return stristr($a,$n);}}); 

var_dump($f);