Я знаю, что на Python и на других языках у нас есть доступ к кортежам, чтобы облегчить, семантически или иначе структурирование данных.
Мой вопрос: имеет ли PHP кортежи?
Если нет, какой ближайший объект?
Я знаю, что на Python и на других языках у нас есть доступ к кортежам, чтобы облегчить, семантически или иначе структурирование данных.
Мой вопрос: имеет ли PHP кортежи?
Если нет, какой ближайший объект?
Массив - это только реальная встроенная структура данных, которую люди используют для всего.
Массивы в PHP - это все хеш-таблицы, которые могут иметь как числовые, так и строковые индексы и могут содержать что угодно (обычно больше массивов).
Есть несколько массивов, которые работают как кортежи.
Увидеть
http://us1.php.net/manual/en/language.types.array.php
Список очень удобен для возврата нескольких значений из функции.
Массивы в 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"
Из 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',
],
...
];
Оба достигают того же результата, но первый имеет четкую семантику.
Начиная с 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'