PHP中有元组吗?

bri*_*ian 46 php tuples

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

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

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

Dam*_*ack 34

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"
Run Code Online (Sandbox Code Playgroud)


Dan*_*ams 33

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

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

有一些数组结构像元组一样工作.

看到

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

http://us1.php.net/list

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

  • 另请记住,为了编写可维护的代码,请尽可能避免在 PHP 中使用数组。人们使用数组作为“一刀切”的数据结构,这使得代码库变得奇怪且难以推理。 (3认同)
  • 是的,数组基本上是元组。你甚至可以使用 `list($var1, $var2) = $someArray;` 来初始化 $var1 和 $var2 (2认同)

Ale*_*lek 7

从 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'
Run Code Online (Sandbox Code Playgroud)

http://php.net/manual/en/migration71.new-features.php#migration71.new-features.symmetry-array-destructuring


小智 5

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

(currState, Event) -> newState
Run Code Online (Sandbox Code Playgroud)

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

$trTable = [
    ['currState', 'fooEvent'] => 'fooState',
    ['currState', 'barEvent'] => 'barState',
    ...
];
Run Code Online (Sandbox Code Playgroud)

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

$trTable = [
    'currState' => [
        'fooEvent' => 'fooState',
        'barEvent' => 'barState',
    ],
    ...
];
Run Code Online (Sandbox Code Playgroud)

两者都达到相同的结果,但第一个具有清晰的语义。