Массив как очередь php

Как работать со списками и очередями в PHP?

Списки и очереди — это две основные структуры данных, которые широко используются в программировании для организации и управления данными. В PHP существует несколько встроенных функций для работы со списками и очередями.

Список — это упорядоченный набор элементов, каждый из которых имеет свой номер. В PHP списки могут быть созданы с помощью массивов. Рассмотрим пример:

$list = array("apple", "banana", "cherry");

В списке $list три элемента: «apple», «banana» и «cherry». Для доступа к элементам списка в PHP используйте квадратные скобки и номер элемента (индекс):

echo $list[0]; // выводит "apple"

Вы также можете добавлять и удалять элементы списка в PHP с помощью функций array_push (), array_pop (), array_shift () и array_unshift ():

array_push($list, "orange"); // добавляет элемент "orange" в конец списка array_pop($list); // удаляет последний элемент из списка array_shift($list); // удаляет первый элемент из списка array_unshift($list, "pear"); // добавляет элемент "pear" в начало списка

Очередь — это упорядоченный набор элементов, где новые элементы добавляются в конец очереди, а старые удаляются из начала. В PHP вы можете создавать очереди с помощью массивов и функций array_push () и array_shift ():

$queue = array(); array_push($queue, "apple"); array_push($queue, "banana"); array_push($queue, "cherry"); echo array_shift($queue); // выводит "apple" и удаляет его из очереди

В PHP также существует более эффективный способ работы с очередями — с использованием классов SplQueue и SplStack. Рассмотрим пример использования SplQueue для создания очереди:

$queue = new SplQueue(); $queue->enqueue("apple"); $queue->enqueue("banana"); $queue->enqueue("cherry"); echo $queue->dequeue(); // выводит "apple" и удаляет его из очереди

Класс SplQueue также имеет ряд других методов для работы с очередью, таких как count (), isEmpty (), clear () и т.д.

Читайте также:  Бинаризация оцу opencv python

В PHP очереди также могут быть созданы с помощью стеков (LIFO — last-in, first-out) и классов SplStack / SplDoublyLinkedList.

Надеюсь, этот обзор поможет вам начать работу со списками и очередями в PHP.

Похожие записи:

Источник

Массивы как очереди в PHP

Я хочу реализовать очередь в PHP, и, посмотрев руководство, я нашел этот пример:

$queue = array("orange", "banana"); array_unshift($queue, "apple", "raspberry"); print_r($queue); 
array('apple', 'raspberry', 'orange', 'banana'); 

В этом случае «банан» находится в начале очереди, и его можно получить с помощью array_pop() ,

Я думаю, что это может быть традиционный подход, но есть ли веская причина, чтобы не переставлять данные в массиве следующим образом?

$queue = array('apple', 'orange'); $queue[] = 'banana';//avoid function call array_push($queue, 'strawberry', 'grape');//add multiple items $next = array_shift($queue); 

Может быть, это тривиально, но таким образом вы можете избежать вызова функции при добавлении одного элемента. Есть ли какая-то другая веская причина не делать это таким образом?

РЕДАКТИРОВАТЬ:

Похоже, что мой вопрос немного сложен для понимания, поэтому, чтобы было легче понять, что мой метод действительно реализует очередь в соответствии с принципом FIFO, я написал этот код в соответствии с примером из руководства по PHP, производя точный тот же массив (кроме в обратном порядке):

$queue = array('banana', 'orange'); $queue[] = 'rasberry'; $queue[] = 'apple'; 
array('banana', 'orange', 'rasberry', 'apple'); 

Это те же самые данные, но в обратном порядке, поэтому для получения следующего элемента вы сделаете это:

$next = array_shift($queue);//The value of $next is 'banana' as before. 

Как уже указывалось в ответах, это сталкивается с тем, как большинство людей визуализируют очередь. Кажется, что читаемость является основной проблемой. Тем не менее, мне легче писать код. Мне это кажется более естественным, потому что обозначение в квадратных скобках [] это дверь, через которую элементы массива входят в многочисленные обстоятельства. Поэтому реализация стека или очереди на самом деле не является вопросом о том, как я мысленно визуализирую свои данные. Вопрос в том, какую функцию использовать для доступа к первому или последнему элементу, прошедшему через дверь. Для очереди это array_shift() и для стека это pop() ,

Источник

Массивы как очереди в PHP

В этом случае «банан» находится в начале очереди, и его можно найти с помощью array_pop() . Я предполагаю, что это может быть традиционный подход, но есть ли веская причина не изменять данные в массиве следующим образом?

$queue = array('apple', 'orange'); $queue[] = 'banana';//avoid function call array_push($queue, 'strawberry', 'grape');//add multiple items $next = array_shift($queue); 

Возможно, это тривиально, но таким образом вы могли избежать вызова функции при добавлении одного элемента. Есть ли еще одна веская причина не делать этого таким образом? EDIT: Похоже, что мой вопрос был немного трудно понять, поэтому, чтобы было легче увидеть, что мой метод действительно реализует очередь в соответствии с принципом FIFO, я написал этот код, чтобы соответствовать примеру из руководства PHP, создавая точно такой же массив (за исключением в обратном порядке):

$queue = array('banana', 'orange'); $queue[] = 'rasberry'; $queue[] = 'apple'; 
array('banana', 'orange', 'rasberry', 'apple'); 

Это те же самые данные, но в обратном порядке, поэтому для возврата следующего элемента вы сделаете так:

$next = array_shift($queue);//The value of $next is 'banana' as before. 

Как уже указывалось в ответах, это противоречит тому, как большинство людей визуализирует очередь. Похоже, что читаемость является основной проблемой. Однако мне легче кодировать. Для меня это кажется более естественным, поскольку обозначение квадратной скобки [] является дверью, через которую входят элементы массива во многих обстоятельствах. Таким образом, реализация либо стека, либо очереди действительно не является вопросом о том, как я мысленно визуализирую свои данные. Это вопрос о том, какую функцию использовать для доступа к первому или последнему элементу, который прошел через дверь. Для очереди это array_shift() , а для стека это pop() .

Источник

Оцените статью