Gibt es Tupel in PHP?

Lesezeit: 2 Minuten

Benutzer-Avatar
Brian

Ich weiß, dass wir in Python und anderen Sprachen Zugriff auf Tupel haben, um die Strukturierung von Daten semantisch oder anderweitig besser zu erleichtern.

Meine Frage ist: Hat PHP Tupel?

Wenn nicht, was ist die nächste Einrichtung?

Benutzer-Avatar
Damien Schwarz

Arrays in PHP können sehr ähnlich wie ein Tupel verwendet werden:

// one dimensional mixed data
$x = [1, 2, "hello"];

// multidimensional third element
$y = [1, 2, [3, 4, 5]];

// assigning to variables (list unpacking)
list($a, $b, $c) = $x; //$a is 1, $b is 2, $c is "hello"

Ab PHP 7.1 können Sie auch so entpacken:

[$a, $b, $c] = $x;

Benutzer-Avatar
Daniel Williams

Die einzige wirklich eingebaute Datenstruktur von PHP, die die Leute für alles verwenden, ist das Array.

Arrays in PHP sind alle Hash-Tabellen und können entweder numerische oder String-Indizes haben und alles enthalten (normalerweise mehr Arrays).

Es gibt einige Array-Konstrukte, die wie Tupel funktionieren.

Sehen

http://us1.php.net/manual/en/language.types.array.php

http://us1.php.net/list

List ist sehr praktisch, um mehrere Werte aus einer Funktion zurückzugeben.

  • Ja, Arrays sind im Grunde Tupel. Sie können sogar verwenden list($var1, $var2) = $someArray; wodurch $var1 und $var2 initialisiert werden

    – Daniel

    28. Februar 2014 um 0:33 Uhr

  • Bitte denken Sie auch daran, dass Sie, um wartbaren Code zu schreiben, die Verwendung von Arrays in PHP so weit wie möglich vermeiden. Die Leute verwenden Arrays als “One-Size-Fits-All”-Datenstruktur, was die Codebasis seltsam und schwer nachvollziehbar macht.

    Benutzer4600953

    28. Oktober 2019 um 16:03 Uhr

Die vorherigen Antworten sind insofern richtig, als Sie Tupel mit PHP-Arrays simulieren können, jedoch nur in begrenztem Sinne, nicht für alle Anwendungsfälle. Dies wird deutlich, wenn Sie Tupel als Schlüssel für eine Map verwenden möchten. Z.B. Bei der Implementierung einer Zustandsmaschine wären die Schlüssel in Ihrer Übergangstabelle Tupel:

(currState, Event) -> newState

Wenn wir die richtige Tupelunterstützung in PHP hätten, könnten wir so etwas tun:

$trTable = [
    ['currState', 'fooEvent'] => 'fooState',
    ['currState', 'barEvent'] => 'barState',
    ...
];

Stattdessen müssen wir es wie folgt simulieren:

$trTable = [
    'currState' => [
        'fooEvent' => 'fooState',
        'barEvent' => 'barState',
    ],
    ...
];

Beide erzielen das gleiche Ergebnis, aber das erste hat eine klare Semantik.

Ab PHP 7.1 wurde die symmetrische Array-Destrukturierung eingeführt, mit der Sie auf die gleiche Weise zuweisen können wie list() wie in den vorherigen Kommentaren erwähnt.

// list() style
list($id1, $name1) = [1, 'Hello']; // Same as $id1 = 1 and $name1 = 'Hello'

// [] style
[$id2, $name2] = [2, 'World']; // Same as $id2 = 2 and $name2 = 'World'

http://php.net/manual/en/migration71.new-features.php#migration71.new-features.symmetric-array-destructuring

Aus https://coderwall.com/p/bah4oq:

function foo()
{
    return array('foo', 'bar');
}

list($a, $b) = foo();

Sie können ein Array von Objekten übergeben, das wie ein Tupel verwendet werden soll. Sie können auch heterogene Typen gleichzeitig im Array speichern, was die Funktionalität eines Tupels sehr genau nachahmt.

1334250cookie-checkGibt es Tupel in PHP?

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

Privacy policy