5 Stimmen

Warum funktioniert in_array() nicht mit $_POST?

Ich versuche, die vom Benutzer übermittelten Daten zu überprüfen, und zwar von $_POST hat mindestens die gleichen Elemente, die mein übergebenes Array hat. Ich tue das, weil ich diese Elemente später verwenden werde, indem ich $_POST['element'] und ich mag keine Fehlermeldungen, die besagen, dass das Element nicht existiert (nicht gesetzt ist) :)

Ich möchte nicht etwas verwenden wie isset($_POST['x'], $_POST['y'], $_POST['z']) denn jedes Mal, wenn ich neu schreiben muss $_POST und es scheint auch unlesbar zu sein.

Ich habe versucht, die in_array(array('x', 'y', 'z'), $_POST) aber es funktioniert nicht (es wird false wenn es zurückkehren sollte true ). Irgendwelche Ideen, wie das funktionieren könnte? :) Ich bin sicher, dass ich leere Strings als $_POST['x'] , $_POST['y'] y $_POST['z'] . Ich habe sogar versucht, die Werte von Schlauch drei zu ändern $_POST Elemente auf etwas anderes als eine leere Zeichenkette zu ändern - trotzdem funktioniert es nicht wie erwartet :(

Danke für den Ratschlag! :)

Bearbeiten:

Ich habe gerade herausgefunden, dass in_array() prüft Werte, nicht Schlüssel. Dann habe ich versucht, wie folgt zu tun...

in_array(array('title', 'slug', 'content'), array_keys($_POST))

Dennoch kehrt sie zurück false . Wie kommt es dazu? ;/

Bearbeiten #2:

Okay, hier sind die Ergebnisse der Fehlersuche...

Eingehend $_POST :

array(3) {
    ["title"]=>
    string(0) ""
    ["slug"]=>
    string(0) ""
    ["content"]=>
    string(0) ""
}

Ergebnis der array_keys($_POST) :

array(3) {
    [0]=>
    string(5) "title"
    [1]=>
    string(4) "slug"
    [2]=>
    string(7) "content"
}

Ergebnis der in_array(array('title', 'slug', 'content'), array_keys($_POST)) :

bool(false)

Die Frage... warum ist es false ? Ich habe alles richtig gemacht, so viel ich weiß.

Bearbeiten #3:

Am Ende habe ich eine eigene Methode namens Arr::keys_exists($keys, $array) .

0voto

mario Punkte 141130

Wenn Sie das Vorhandensein mehrerer Schlüssel sicherstellen wollen, dann array_diff anwendbar sein könnte:

!array_diff(array('title', 'slug', 'content'), array_keys($_POST))

Das könnte Sie auch interessieren array_intersect_uassoc .

0voto

Rifat Punkte 7472

@Eric hatte recht, probieren Sie das -

in_array(array('title', 'slug', 'content'), array(array_keys($_POST)))

-1voto

Eric Punkte 90800

Du verstehst nicht in_array .

$a = array(
    'x' => 1
);
echo in_array(array('x', 'y', 'z'), $a); // false

$a['an array'] = array('x', 'y', 'z');
echo in_array(array('x', 'y', 'z'), $a); // true

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X