我知道在Python和其他语言中,我们可以访问元组,从而更好地促进数据结构的语义或其他方式。
我的问题是:PHP有元组吗?
如果没有,最近的设施是什么?
答案 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
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'