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?
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
List est très pratique pour retourner plusieurs valeurs d'une fonction.
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"
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.
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.