2017-08-25 1 views
0

ich eine CSV-Datei, die in einem Array öffnet und OrteSuche mehrdimensionale Array für jeden Wert, die übereinstimmt

Beispiel für CSV-Datei:

Steven King, IT 

Ronald Dahl, BFG 

Charles Abbot, The island 

So schafft dies meinen Array mit verschiedenen Schlüsseln ect für jeden Künstler ect. Ich öffne meine csv-Datei mit dem unten nach oben:

$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"); 

der gut arbeitet, aber ich kämpfen, um die Nutzer nach für jeden Wert der ganzen Array zu suchen; Mein Formular gibt die Benutzerzeichenfolge aus und durchsucht das Array nach jedem Wert, der dem entspricht, was der Benutzer eingibt (nicht case senstive). dh:

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

Können sagen, der Benutzer gibt stephen oder Insel, im Versuch, es zu erhalten, die $ csv-Array für einen beliebigen Wert zu suchen, die die Zeichenfolge und Ausgabe auf dieser Taste alle Werte übereinstimmt oder diese enthalten. Ich habe versucht mit array_filter & preg_grep, aber nicht viel Glück.

Antwort

0

Ich denke, Sie benötigen Array-Suchfunktion für bestätigen, wenn Sie die $ cvs-Array in Schleife erstellen. Sie können die Ergebnisse in dieser Schleife erstellen. Hier ist ein Beispiel.

<?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

Danke Mehmet, ich habe immer noch Probleme mit der Platzierung der Zeile in der Ergebnismatrix. Dh es druckt ein leeres Array aus. Fehle ich etwas? – Buzzy

+0

die cvs-datei ist wahr? weil es mit Punkt (.) beginnt –

+0

Sorry, das war mein Fehler, ja ich habe den richtigen Dateipfad für die Datei, aber es wird nicht die Werte zum Ergebnis-Array hinzufügen, nicht sicher, ob die array_search() Funktion funktioniert. – Buzzy

0

Hier ist ein funktionaler Ansatz:

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

Da Sie in der Lage waren, eine Reihe von CSV-Datei zu erstellen, einfach das Array zu array_filter passiert und dann die Schleife durch jedes Array foreach und verwenden mit stristr zu gebe alle Werte zurück, die deiner Suchnadel entsprechen.

$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); 
Verwandte Themen