2017-02-08 1 views
2

ich eine CSV-Datei, die Linien mit einem Format enthält wie folgt:Wie ein Datum filtern filter_var_array mit

Name;timestamp;floatValue 

Die hat Linien über als 20000 Datei, und ich möchte jeden Wert jeder Zeile filtern. Ich habe versucht, mit diesem Code:

$args=array(FILTER_SANITIZE_STRING,FILTER_VALIDATE_INT,FILTER_VALIDATE_FLOAT); 
while (($line = fgetcsv($handle, 1024, ";")) !== FALSE) { 

     $testing = filter_var_array($line,$args); 
     var_dump($testing); 
} 

ich diesen Fehler:

filter_var_array(): Numeric keys are not allowed in the definition array 

Also ich habe 2 Probleme hier:

  • Warum erhalte ich diesen Fehler? In der Tat, wie ich aus der Zeile ein Array mit Schlüsseln und Werten nicht bekommen kann, weiß ich nicht, wie man immer noch die filter_var_array
  • Wie kombinieren Filterstrings, Floats mit einem Datum? Ist es möglich, das Datum in der Mitte zu überspringen, um es separat nach DateTime::CreateFromFormat zu filtern? Ich habe diese doc überprüft, aber es gibt keinen Filter für Daten.

:::EDIT:::

Was dazu:

$data = array(
     'name' => $line[0], 
     'timestamp' => $line[1], 
     'value' => $line[2]); 

     $args=array(
      'name' => FILTER_SANITIZE_STRING, 
      'timestamp' => FILTER_VALIDATE_INT, 
      'value' => FILTER_VALIDATE_FLOAT); 
     $testing = filter_var_array($data,$args); 
     var_dump($testing); 

bitte mir sagen, ob es eine gute approche ist.

+1

@StuartWagner Ich weiß, dass es mehr Felder sind aber meine Array enthalten, die ich will Filter hat keine Schlüssel und Werte (indexiertes Array) – JavaQueen

+0

'filter_var_array()' benötigt ein Eingabearray mit Stringschlüsseln. Möglicherweise benötigen Sie einen anderen Ansatz, wenn Sie solche Schlüssel nicht haben. –

+1

@StuartWagner Dann, warum dieses Beispiel funktioniert: ' ' – JavaQueen

Antwort

1

filter_var_array Arbeiten mit assoziativen Arrays, nicht numerisch,

Sie Ihre Arrays durch Hinzufügen von assoziativen Schlüssel umwandeln müssen

$args = array('string' => FILTER_SANITIZE_STRING, 'int' => FILTER_VALIDATE_INT, 'float' => FILTER_VALIDATE_FLOAT); 
$keys = array('string', 'int', 'float'); 
while (($line = fgetcsv($handle, 1024, ";")) !== FALSE) { 
    $testing = filter_var_array(array_combine($keys, $line), $args); 
    var_dump($testing); 
} 
+0

Der Name der Schlüssel ist nicht wichtig, solange jeder Schlüsselname dem Filter entspricht, der mit –

+1

verbunden ist, das interessant ist – JavaQueen

Verwandte Themen