Ответ 1
Короткий ответ
Для стека используйте push
и pop
(добавьте в конец, возьмите с конца).
Для очереди используйте push
и shift
(добавьте в конец, возьмите с начала).
Вопросы
Документация
Рассматривая документацию PHP на сегодняшний день 2016-12-29 для этих функций, мы находим следующее:
Для array_push():
описание упоминает: array_push() рассматривает массив как стек "
и пример использует "$stack
" .
Для array_pop():
описание ничего не говорит о стеках или очередях
и пример использует "$stack
" .
Для array_shift():
описание ничего не упоминает о стеках или очередях (но упоминания о необходимости переиндексации)
и пример использует "$stack
" .
Для array_unshift():
описание ничего не упоминает о стеках или очередях (но упоминания о необходимости переиндексации)
и пример использует "$queue
".
Итак, это предполагает использование push
и pop
для стеков (на основе упоминания в описании)
и предлагает использовать unshift
и pop
для очередей (основанных только на упоминании очереди в примерах).
Это кажется немного худым... Здесь предлагается предложение по улучшению документации: https://bugs.php.net/bug.php?id=73839
Производительность
Запуск:
echo "\nstack push & pop approach : ";
$a=[];$i=0;$t=microtime(true); while($i<100000) { array_push($a, 'dummy'); array_pop($a); ++$i; }; echo (microtime(true) - $t);
echo "\nstack unshift & shift approach: ";
$a=[];$i=0;$t=microtime(true); while($i<100000) { array_unshift($a, 'dummy'); array_shift($a); ++$i; }; echo (microtime(true) - $t);
echo "\nqueue push & shift approach : ";
$a=[];$i=0;$t=microtime(true); while($i<100000) { array_push($a, 'dummy'); array_shift($a); ++$i; }; echo (microtime(true) - $t);
echo "\nqueue unshift & pop approach : ";
$a=[];$i=0;$t=microtime(true); while($i<100000) { array_unshift($a, 'dummy'); array_pop($a); ++$i; }; echo (microtime(true) - $t);
Возвращает это:
stack push & pop approach : 0.011210918426514
stack unshift & shift approach: 0.015399217605591
queue push & shift approach : 0.011627912521362
queue unshift & pop approach : 0.015273094177246
Для стека s это предполагает использование push
и pop
: естественная терминология, соответствующая упоминанию в документации и также работающая лучше (что имеет смысл с учетом переиндексации с помощью unshift
и shift
).
Для очереди s это предполагает использование push
и shift
, несмотря на упоминание в документации.