Are there tuples in PHP?

无人久伴 提交于 2019-12-22 01:49:43

问题


I know in Python and other languages we have access to tuples to better facilitate, semantically or otherwise, the structuring of data.

My question is: Does PHP have tuples?

If not, what is the nearest facility?


回答1:


PHP's only real built in data structure that people use for everything is the array.

Arrays in PHP are all hash tables and can have either numeric or string indexes and can contain anything (usually more arrays).

There are a few array constructs that work like tuples.

See

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

http://us1.php.net/list

List is very convenient for returning multiple values from a function.




回答2:


Arrays in PHP can be used very much like a 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"

As of PHP 7.1 you can also unpack like this:

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



回答3:


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

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

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

You can pass an array of objects to be used just like a tuple. You can also store heterogeneous types in the array at once, which mimics very closely the functionality of a tuple.




回答4:


As of PHP 7.1 Symmetric Array Destructuring was introduced which allows you to assign in the same way as list() as mentioned in previous comments.

// 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




回答5:


The previous answers are correct in that you can simulate tuples with PHP arrays, however only in a limited sense, not all use cases. This is evident when you want to use tuples as keys to a map. Eg. when implementing a state machine, keys in your transition table would be tuples:

(currState, Event) -> newState

If we had proper tuple support in PHP we could do something like this:

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

Instead we have to simulate it like this:

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

Both achieve the same result, but the first one has clear semantics.



来源:https://stackoverflow.com/questions/22083760/are-there-tuples-in-php

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!