Y a-t-il des tuples en PHP?

je sais qu'en Python et dans d'autres langues nous avons accès à tuples pour faciliter, sémantiquement ou autrement, la structuration des données.

ma question Est: PHP a-t-il des tuples?

dans la négative, Quelle est l'installation la plus proche?

36
demandé sur brian 2014-02-28 04:29:04

4 réponses

la seule vraie structure de données de PHP que les gens utilisent pour tout est le tableau.

les tableaux en PHP sont tous des tables de hachage et peuvent avoir des index numériques ou des index de chaîne et peuvent contenir n'importe quoi (généralement plus de tableaux).

il y a quelques constructions de tableaux qui fonctionnent comme des tuples.

Voir

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

http://us1.php.net/list

List est très pratique pour retourner plusieurs valeurs d'une fonction.

27
répondu Daniel Williams 2018-01-24 12:30:33

Les tableaux en php peuvent être utilisés comme un tuple:

// 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"
26
répondu Damien Black 2018-04-23 02:20:01

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

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

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

Vous pouvez passer un tableau d'objets à utiliser comme un tuple. Vous pouvez également stocker des types hétérogènes dans le tableau à la fois, qui imite très étroitement la fonctionnalité d'un tuple.

3
répondu Blue Ice 2014-02-28 00:32:04

les réponses précédentes sont correctes en ce que vous pouvez simuler des tuples avec des tableaux PHP, cependant seulement dans un sens limité, pas tous les cas d'utilisation. Cela est évident lorsque vous voulez utiliser tuples comme clés pour une carte. Par exemple. lors de la mise en œuvre d'une machine d'état, les clés dans votre table de transition seraient des tuples:

(currState, Event) -> newState

si nous avions un support de tuple adéquat en PHP, nous pourrions faire quelque chose comme ceci:

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

au lieu de cela nous devons le simuler comme ceci:

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

les deux atteignent le même résultat, mais la première a une sémantique claire.

1
répondu zsolt 2017-01-18 13:26:53