PHP中有元组吗?

时间:2014-02-28 00:29:04

标签: php tuples

我知道在Python和其他语言中,我们可以访问元组,从而更好地促进数据结构的语义或其他方式。

我的问题是:PHP有元组吗?

如果没有,最近的设施是什么?

5 个答案:

答案 0 :(得分:33)

PHP中的数组可以像元组一样使用:

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

从PHP 7.1开始,您也可以像这样解压缩:

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

答案 1 :(得分:30)

PHP唯一真正的内置数据结构是人们用于所有内容的数组。

PHP中的数组都是哈希表,可以有数字或字符串索引,可以包含任何内容(通常包含更多数组)。

有一些数组构造像元组一样工作。

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

http://us1.php.net/list

List非常方便从函数返回多个值。

答案 2 :(得分:3)

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

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

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

您可以像元组一样传递要使用的对象数组。您还可以同时在阵列中存储异构类型,这非常类似于元组的功能。

答案 3 :(得分:2)

之前的答案是正确的,因为您可以使用PHP数组模拟元组,但只是在有限的意义上,而不是所有用例。当您想要使用元组作为地图的键时,这一点很明显。例如。在实现状态机时,转换表中的键将是元组:

(currState, Event) -> newState

如果我们在PHP中有适当的元组支持,我们可以这样做:

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

相反,我们必须像这样模拟它:

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

两者都实现了相同的结果,但第一个结果具有明确的语义。

答案 4 :(得分:1)

从PHP 7.1开始,引入了对称阵列解构,它使您可以按照与先前评论中提到的list()相同的方式进行分配。

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