Was ist das Äquivalent zu Folgendem (basierend auf JS-Stil) in PHP:
echo $post['story'] || $post['message'] || $post['name'];
Also, wenn es eine Geschichte gibt, dann poste das; oder wenn eine Nachricht vorhanden ist, poste das, etc …
MKN-Weblösungen
Was ist das Äquivalent zu Folgendem (basierend auf JS-Stil) in PHP:
echo $post['story'] || $post['message'] || $post['name'];
Also, wenn es eine Geschichte gibt, dann poste das; oder wenn eine Nachricht vorhanden ist, poste das, etc …
Adam Pietrasiak
Es wäre (PHP 5.3+):
echo $post['story'] ?: $post['message'] ?: $post['name'];
Und für PHP7:
echo $post['story'] ?? $post['message'] ?? $post['name'];
Dies erzeugt eine Warnung für Variablen, die nicht gesetzt sind
– billyonecan
26. Februar 2016 um 13:58 Uhr
Ich bin wirklich überrascht. Ich wusste all die Jahre nichts davon
– Benutzer2286243
10. April 2018 um 8:43 Uhr
Mario
Dafür gibt es einen Einzeiler, der aber nicht gerade kürzer ist:
echo current(array_filter(array($post['story'], $post['message'], $post['name'])));
array_filter
würde Ihnen alle Nicht-Null-Einträge aus der Liste der Alternativen zurückgeben. Und current
erhält nur den ersten Eintrag aus der gefilterten Liste.
Dies ist perfekt; Ich würde sagen, das ist das Äquivalent zu dem, was ich gesucht habe. Danke mario!
– MKN Weblösungen
20. November 2011 um 18:53 Uhr
Laufzeitmäßig wird dies dazu führen, dass alle Werte aufgezählt werden, ob null oder nicht, richtig? Das JS-Beispiel hätte beim ersten Nicht-Null-Wert angehalten.
– Tom Lianza
11. September 2012 um 0:36 Uhr
@pinouchon Bei allem Respekt, das ist überhaupt nicht schwer zu lesen. Obwohl mir die Antwort von Kluska000 besser gefällt.
– ankr
13. Mai 2014 um 14:54 Uhr
array_filter gibt alle Nicht-Null-Einträge aus dem Array zurück, nicht nur den ersten.
– Nett
16. März 2017 um 15:05 Uhr
@Neets Deshalb die current()
wickelt es ein.
– mario
16. März 2017 um 15:47 Uhr
Da beide or
und ||
einen ihrer Operanden nicht zurückgeben, das ist nicht möglich.
Dafür könnte man aber eine einfache Funktion schreiben:
function firstset() {
$args = func_get_args();
foreach($args as $arg) {
if($arg) return $arg;
}
return $args[-1];
}
Ja, ich dachte, das wäre mein anderer Weg, ich hatte gehofft, dass es einen noch kürzeren Weg der Ausführung gibt.
– MKN Weblösungen
20. November 2011 um 18:49 Uhr
Am einfachsten wäre es zB auf python umzusteigen :p
– Meister der Diebe
20. November 2011 um 18:50 Uhr
Ich denke, das Übergeben einer nicht vorhandenen var an diese Funktion würde einen Fehler verursachen.
– Adam Pietrasiak
15. Oktober 2015 um 13:45 Uhr
@AdamPietrasiak – Das dachte ich auch, aber ich habe es gerade getestet und es beschwert sich nicht. Obwohl ich es nicht “firstset” nennen würde, sondern vielleicht “firsttrue”.
– TextGeek
2. September 2016 um 16:29 Uhr
Ab PHP 7 können Sie die Null-Koaleszenzoperator:
Der Null-Coalescing-Operator (??) wurde als syntaktischer Zucker für den häufigen Fall hinzugefügt, dass ein Ternär in Verbindung mit isset() verwendet werden muss. Es gibt seinen ersten Operanden zurück, falls er existiert und nicht NULL ist; andernfalls gibt es seinen zweiten Operanden zurück.
// Coalescing can be chained: this will return the first
// defined value out of $_GET['user'], $_POST['user'], and
// 'nobody'.
$username = $_GET['user'] ?? $_POST['user'] ?? 'nobody';
Aufbauend auf Adams Antwort könnten Sie den Fehlerkontrolloperator verwenden, um die Fehler zu unterdrücken, die generiert werden, wenn die Variablen nicht gesetzt sind.
echo @$post['story'] ?: @$post['message'] ?: @$post['name'];
http://php.net/manual/en/language.operators.errorcontrol.php
Du kannst es versuchen
<?php
echo array_shift(array_values(array_filter($post)));
?>
Diese Syntax würde 1 ausgeben, wenn eines davon gesetzt und nicht falsch ist, und 0, wenn nicht.
Hier ist eine einzeilige Methode, die funktioniert und die für eine beliebige Anzahl von Optionen erweitert werden kann:
echo isset($post['story']) ? $post['story'] : isset($post['message']) ? $post['message'] : $post['name'];
… aber ziemlich hässlich. Bearbeiten: Marios ist besser als meine, da es Ihre gewählte willkürliche Reihenfolge so respektiert, aber im Gegensatz zu dieser wird es nicht mit jeder neuen Option, die Sie hinzufügen, hässlicher.
Ihre Option berücksichtigt jedoch den fehlenden assoziativen Schlüssel, der andernfalls einen PHP-Fehler generieren würde.
– Manatax
2. Januar 2014 um 0:58 Uhr
Was ist der Sinn eines solchen Operators? Wissen Sie nicht, welche bestimmte Variable Sie ausgeben möchten?
– Ihr gesunder Menschenverstand
20. November 2011 um 18:51 Uhr
Für nur 2 Argumente können Sie verwenden:
echo isset($_POST['story']) ? $_POST['story'] : $_POST['message'];
versuchen Sie schließlich, es zu verschachteln.– mj82
20. November 2011 um 18:52 Uhr
Es basiert auf dem Facebook-API-Stream; nur ein/zwei von drei werden pro Post existieren.
– MKN Weblösungen
20. November 2011 um 18:52 Uhr