Есть кортежи в PHP?

Я знаю, что на Python и на других языках у нас есть доступ к кортежам, чтобы улучшить, семантически или иначе, структурирование данных.

Мой вопрос: имеет ли PHP кортежи?

Если нет, то какой ближайший объект?

Solutions Collecting From Web of "Есть кортежи в PHP?"

Только реальная встроенная структура данных PHP, которую люди используют для всего, – это массив.

Массивы в PHP – это все хэш-таблицы и могут содержать либо числовые индексы строк, либо содержать что угодно (обычно больше массивов).

Существует несколько конструкций массивов, которые работают как кортежи.

Видеть

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

http://us1.php.net/list

Список очень удобен для возврата нескольких значений из функции.

Массивы в php можно использовать очень похоже на кортеж:

 // one dimensional mixed data $x = array(1, 2, "hello"); // multidimensional third element $y = array(1, 2, array(3, 4, 5)); // assigning to variables (list unpacking) list($a, $b, $c) = $x; //$a is 1, $b is 2, $c is "hello" 

Единственное проблемное различие заключается в том, как вы должны постоянно вводить array . Не так красиво, как кортежи.

Обновление. Начиная с PHP 5.4, вы можете заменить array() квадратными скобками [] . Вышеприведенные примеры могут выглядеть следующим образом:

 // one dimensional mixed data $x = [1, 2, "hello"]; // multidimensional third element $y = [1, 2, [3, 4, 5]]; 

Из https://coderwall.com/p/bah4oq :

 function foo() { return array('foo', 'bar'); } list($a, $b) = foo(); 

Вы можете передать массив объектов, которые будут использоваться точно так же, как кортеж. Вы также можете хранить гетерогенные типы в массиве сразу, что очень близко имитирует функциональность кортежа.

Предыдущие ответы верны в том, что вы можете имитировать кортежи с массивами PHP, однако только в ограниченном смысле, а не во всех случаях использования. Это очевидно, если вы хотите использовать кортежи в качестве ключей к карте. Например. при реализации конечного автомата ключи в таблице перехода будут иметь кортежи:

 (currState, Event) -> newState 

Если бы у нас была правильная поддержка кортежей в PHP, мы могли бы сделать что-то вроде этого:

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

Вместо этого мы должны имитировать это следующим образом:

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

Оба достигают такого же результата, но первый имеет четкую семантику.