Überprüfen Sie, ob der Array-Wert gesetzt und null ist

Lesezeit: 2 Minuten

So prüfen Sie, ob eine Array-Variable vorhanden ist

$a = array('a'=>1, 'c'=>null);

gesetzt und ist null.

function check($array, $key)
{
    if (isset($array[$key])) {
        if (is_null($array[$key])) {
            echo $key . ' is null';
        }
        echo $key . ' is set';
    }
}

check($a, 'a');
check($a, 'b');
check($a, 'c');

Ist es in PHP möglich, eine Funktion zu haben, die prüft, ob $a[‘c’] null ist und wenn $a[‘b’] existieren ohne “PHP Notice: …”-Fehler?

  • Ich erhalte keine Hinweiswarnungen mit Ihrem Code.

    – Barmar

    20. Juli 2013 um 22:01 Uhr

Benutzer-Avatar
nickb

Verwenden array_key_exists() Anstatt von isset()Weil isset() wird zurückkehren false wenn die Variable ist nullwohingegen array_key_exists() prüft nur, ob der Schlüssel im Array vorhanden ist:

function check($array, $key)
{
    if(array_key_exists($key, $array)) {
        if (is_null($array[$key])) {
            echo $key . ' is null';
        } else {
            echo $key . ' is set';
        }
    }
}

  • @pulzarraider warum hast du ersetzt is_null() mit ===?

    – Ivanka Todorova

    29. Juni 2016 um 8:38 Uhr

  • Weil es schneller ist.

    – Pulsarräuber

    29. Juni 2016 um 8:42 Uhr

  • @pulzarraider – Irgendwelche Beweise, die diese Behauptung untermauern? Denn dieser Beitrag und dieser Beitrag scheint Ihnen nicht zuzustimmen, spart bestenfalls Nanosekunden und macht Ihre Bearbeitung zu einer überflüssigen Mikrooptimierung.

    – Nickb

    29. Juni 2016 um 13:20 Uhr

  • Ja, es ist Mikrooptimierung, aber warum machen Sie Ihre Funktion nicht so schnell wie möglich? Isset() ist etwas langsamer, weil es ein Funktionsaufruf ist.

    – Pulsarräuber

    30. Juni 2016 um 10:52 Uhr


Sie können es als Referenz übergeben:

function check(&$array, $key)
{
    if (isset($array[$key])) {
        if (is_null($array[$key])) {
            echo $key . ' is null';
        }
        echo $key . ' is set';
    }
}

check($a, 'a');
check($a, 'b');
check($a, 'c');

Sollte keine Benachrichtigung geben

Aber isset wird zurückkehren false auf Nullwerten. Du kannst es versuchen array_key_exists stattdessen

  • Der ursprüngliche Code gibt auch keine Benachrichtigung. Eine Referenzübergabe ist nicht erforderlich.

    – Barmar

    20. Juli 2013 um 22:01 Uhr

  • @nickb, du postest eine Antwort, während ich überprüfte, ob die Dinge, an die ich mich erinnere, richtig waren 🙂

    – RiAD

    20. Juli 2013 um 22:03 Uhr


  • @Barmar, ja, mein Fehler

    – RiAD

    20. Juli 2013 um 22:04 Uhr

  • Es ist, was ich wollte. Da isset bei null false zurückgibt, mache ich es so: if(!isset($array[$key]) && is_null($array[$key])), was wahr ist, wenn $array[$key] ist Null.

    – Bartek Kosa

    20. Juli 2013 um 22:10 Uhr


  • @BartekKosa Ihre Implementierung ist fehlerhaft. Es wird auch true zurückgeben und auf Schlüssel hinweisen, die nicht existieren.

    – dev-null-Bewohner

    20. Juli 2013 um 22:15 Uhr

1063190cookie-checkÜberprüfen Sie, ob der Array-Wert gesetzt und null ist

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy