Objetivos
A classe SplDoublyLinkedList é uma estrutura de dados dinâmica que proporciona
uma forma para que possamos armazenar dados como valor ou objeto utilizando uma
lista duplamente ligada. Podemos utilizar todos os tipos de dados.
O tipo SplDoublyLinkedList implementa as interfaces abaixo:
- Iterator
- Countable
- ArrayAccess
- Serializable
Para utilizarmos o tipo SplDoublyLinkedList, declaramos uma instancia de sua
classe como na sintaxe abaixo:
Sintaxe
$variavel = new SplDoublyLinkedList();
Onde
-
Exemplo 1
<?php
$sdll = new SplDoublyLinkedList();
?>
Saída
-
Adicionando elementos: no fim
Para adicionar um elemento, utilizamos o método push que recebe valor passado como argumento
para esse método.
Sintaxe
push(mixed $value): void
Onde
$value: valor para adicionar
Exemplo 2
<?php
$sdll = new SplDoublyLinkedList();
$valor = "uma string";
$sdll->push($valor);
?>
Saída
-
Para termos conhecimento do número de elementos contidos em um SplDoublyLinkedList,
fazemos uso do método count como mostrado abaixo:
Sintaxe
count(int $mode = COUNT_NORMAL): int
Onde
$mode: modo da contagem: COUNT_NORMAL ou COUNT_RECURSIVE
Retorno
Inteiro contendo o número de elementos
Exemplo 3
<?php
$sdll = new SplDoublyLinkedList();
$valor = "uma string";
$sdll->push($valor);
echo $sdll->count();
?>
Saída
1
Acessando/alterando elementos
O tipo de dado SplDoublyLinkedList permite que seus elementos sejam acessados
utilizando um índice que é passado como argumento para o indexaxor [].
Sintaxe:
$variavel[indice];
Exemplo 4
<?php
$sdll = new SplDoublyLinkedList();
$valor = "uma string";
$sdll->push($valor);
echo $sdll[0];
?>
Saída
uma string
A alteração de um elemento contido em um SplDoublyLinkedList, basta acessar
o desejado elementos e substituir seu valor associado com um novo valor.
Sintaxe:
$variavel[int índice] = valor;
Exemplo 5
<?php
$sdll = new SplDoublyLinkedList();
$valor = "uma string"; //valor associado ao objeto
$sdll->push($valor);
echo $sdll[0],"\n";
$sdll[0] = 999;
echo $sdll[0];
?>
Saída
uma string
1.99
Para percorrer os elementos de uma objeto SplDoublyLinkedList, podemos utilizar o
comando de repetição foreach e recuperando os valores de índice,
chave e valor associado.
O comando foreach assim como outros comandos de repetição foram vistos em
PHP: Comandos de Repetição.
Exemplo 6
<?php
$sdll = new SplDoublyLinkedList();
$valor = "uma string";
$sdll->push($valor);
$sdll->push(999);
foreach($sdll as $indice => $valor)
echo $indice,': ',$valor,"\n";
?>
Saída
0: uma string
1: 999
Removendo elemento: do fim
Para a remoção de um elemento contido em um SplDoublyLinkedList, utilizamos o método
pop. Esse método não recebe argumentos e retorna elemento removido do fim.
Sintaxe
pop(): mixed
Onde
-
Exemplo 7
<?php
$sdll = new SplDoublyLinkedList();
$valor = "uma string";
$sdll->push($valor);
$sdll->push(999);
echo $sdll->count(),"\n";
$sdll->pop();
echo $sdll->count();
?>
Saída
uma string qualquer
2
1
Métodos SplDoublyLinkedList
A classe SplDoublyLinkedList fornece métodos para manipular seus dados. Abaixo,
uma lista de todos os métodos dessa classe que podem ser acessado clicando em seus
nomes:
Método |
Descrição |
add |
Adiciona um elemento em uma posição |
bottom |
Retorna o primeiro elemento |
count |
Retorna número de elementos |
current |
Retorna elemento atual |
getIteratorMode |
Retorna o modo do iterador |
isEmpty |
Verificar se uma SplDoublyLinkedList está vazia |
key |
Retorno o índice do elemento atual |
next |
Move iterador para próximo elemento |
offsetExists |
Verificar se um elemento existe |
offsetGet |
Recuperar o valor de um elemento |
offsetSet |
Atualizar o valor de um elemento |
offsetUnset |
Remove valor elemento contido |
pop |
Remove o elemento do fim |
prev |
Move iterador para elemento anterior |
rewind |
Volta o iterador para o início |
serialize |
Serializa um SplDoublyLinkedList |
setIteratorMode |
Altera o valor associado elemento atual |
shift |
Remove um elemento do início |
top |
Retorna elemento do fim |
unserialize |
Deserializa uma SplDoublyLinkedList |
unshift |
Adiciona um elemento no ínicio |
valid |
Verifica se a posição do iterador é válida |
Com o método add, podemos adicionar um novo elemento em uma
SplDoublyLinkedList. Esse método recebe um índice e um valor como argumentos.
Sintaxe
add(int $index, mixed $value): void
Onde
$index: índice do novo elemento
$value: valor que será adicionado
Retorno
Inteiro contendo o número de elementos
Exceção
Lança OutOfRangeException índice inválido
Exemplo
<?php
$sdll = new SplDoublyLinkedList();
$valor = "uma string";
$sdll->add(0,$valor);
$sdll->add(1,999);
echo $sdll->count(),"\n";
?>
Saída
2
O objetivo do método bottom é retornar o primeiro elemento armazenado em uma
SplDoublyLinkedList. Esse método não recebe argumentos e não remove o elemento
acessado.
Sintaxe
bottom(): mixed
Onde
mixed: tipo de dado retornado de acordo com o utilizado pelo elemento.
Exceção
Lança RuntimeException se SplDoublyLinkedList vazia.
Exemplo
<?php
$sdll = new SplDoublyLinkedList();
$sdll->push(1);
$sdll->push(2);
echo $sdll->bottom(),"\n";
?>
Saída
1
O método current retorna o elemento de uma SplDoublyLinkedList na posição
atual apontada pelo seu iterador.
Sintaxe
current(): mixed
Onde
-
Retorno
Elemento na posição atual do iterador
Exemplo
<?php
$sdll = new SplDoublyLinkedList();
$sdll->push(-1);
$sdll->push(-2);
$sdll->rewind();
echo $sdll->current();
?>
Saída
-1
O método getIteratorMode retorna o modo do iterador de uma SplDoublyLinkedList.
Esse método não recebe argumentos.
Sintaxe
getIteratorMode(): int
Onde
-
Retorno
Inteiro contendo o modo do iterador:
IT_MODE_LIFO = int(2)
IT_MODE_FIFO = int(0)
IT_MODE_DELETE = int(1)
IT_MODE_KEEP = int(0)
Exemplo
<?php
$sdll = new SplDoublyLinkedList();
$sdll->push(1);
$sdll->push(2);
echo $sdll->getIteratorMode(),"\n";
?>
Saída
1
Com o método isEmpty, podemos verificar se uma SplDoublyLinkedList possui
elementos ou está vazia.
Sintaxe
isEmpty(): bool
Onde
-
Retorno
true(1) se vazio, false(0) caso contrário.
Exemplo
<?php
$sdll = new SplDoublyLinkedList();
echo $sdll->isEmpty(),"\n";
?>
Saída
1
O objetivo do método key é retornar o índice do elemento na posição atual do
iterador. O iterador não sofre nenhuma alteração em relação ao seu incremento de
índice ou posição.
Sintaxe
key(): mixed
Onde
-
Retorno
Índice do elemento atual
Exemplo
<?php
$sdll = new SplDoublyLinkedList();
$sdll->push(-1);
echo $sdll->current(),"\n";
echo $sdll->key();
?>
Saída
0
Com o método offsetExists podemos verificar se um elemento possui valor
associado a um determinado índice passado como argumento.
Sintaxe
offsetExists(int $index): bool
Onde
$index: índice para verificação
Retorno
true(1) se valor existe, false(0) caso contrário.
Exemplo
<?php
$sdll = new SplDoublyLinkedList();
$sdll->push(-1);
$sdll->push(-2);
echo $sdll->offsetExists(100);
?>
Saída
0
Com o método offsetGet podemos recuperar o valor de um elemento de um
determinado índice passado como argumento.
Sintaxe
offsetGet(object $index ): mixed
Onde
$index: índice para recuperar valor
Retorno
Valor do elemento na posição $index
Exceção
Lança OutOfRangeException se $index inválido
Exemplo
<?php
$sdll = new SplDoublyLinkedList();
$sdll->push(-1);
$sdll->push(-2);
echo $sdll->offsetGet(1);
?>
Saída
-2
O método offsetSet é utilizado para atualizar o valor de um elemento em um
determinado índice que é passado como argumento para o método.
Sintaxe
offsetSet(mixed $index, mixed $value): void
Onde
$index: índice do elemento que desejamos alterar o valor.
$value: valor para atualização
Retorno
-
Exceção
Lança OutOfRangeException se $index inválido
Exemplo
<?php
$sdll = new SplDoublyLinkedList();
$sdll->push(-1);
$sdll->push(-2);
$sdll->offsetSet(0,-999);
echo $sdll->offsetGet(0);
?>
Saída
-999
O método offsetUnset é utilizado para remoção de um determinado elemento
contido em uma SplDoublyLinkedList baseado em um índice que é passado
como argumento.
Sintaxe
offsetUnset(object $index): void
Onde
$index: índice do elemento que será removido
Retorno
-
Exemplo
<?php
$sdll = new SplDoublyLinkedList();
$sdll->push(999);
$sdll->push(888);
$sdll->push(777);
echo $sdll->offsetGet(0),"\n";
$sdll->offsetUnset(0);
echo $sdll->offsetGet(0),"\n";
?>
Saída
999
888
Com o método pop, podemos recuperar o elemento no fim de uma
SplDoublyLinkedList. Esse método não recebe argumentos.
Sintaxe
pop(): mixed
Onde
-
Retorno
Elemento removido de acordo com seu tipo
Exceção
Lança RuntimeException se SplDoublyLinkedList estiver vazia.
Exemplo
<?php
$sdll = new SplDoublyLinkedList();
$sdll->push(1);
$sdll->push(2);
echo $sdll->count(),"\n";
echo $sdll->pop(),"\n";
echo $sdll->count(),"\n";
?>
Saída
2
1
O objetivo do método prev é mover o iterador de uma SplDoublyLinkedList
para o elementos anterior a posição atual. Esse método não recebe argumentos.
Sintaxe
prev(): void
Onde
-
Retorno
-
Exemplo
<?php
$sdll = new SplDoublyLinkedList();
$sdll->push(1);
$sdll->push(2);
$sdll->rewind();
$sdll->next(); //2
$sdll->prev();//1
echo $sdll->pop(); //1
?>
Saída
2
Com o método push podemos adicionar um novo elemento, que é passado como
argumento, no fim de uma SplDoublyLinkedList.
Sintaxe
push(mixed $value): void
Onde
$value: valor adicionado
Retorno
-
Exemplo
<?php
$sdll = new SplDoublyLinkedList();
$sdll->push(1);
echo $sdll->count();
?>
Saída
1
O método setIteratorMode é usado para setar o modo do iterador de uma
SplDoublyLinkedList. Esse método recebe um inteiro como o modo a ser atribuído.
Sintaxe
setIteratorMode(int $mode): int
Onde
$mode: modo do iterador.
IT_MODE_DELETE = int(1)
IT_MODE_KEEP = int(0)
Retorno
Inteiro contendo os modos do iterador
O modo de direção não pode ser alterado para SplDoublyLinkedList. A tentativa
irá lançar RuntimeException.
Exemplo
<?php
$sdll = new SplDoublyLinkedList();
$sdll->push(1);
$sdll->push(2);
$sdll->push(3);
echo $sdll->count(),"\n";
$sdll->rewind();
$sdll->setIteratorMode(SplDoublyLinkedList::IT_MODE_DELETE);
foreach($sdll as $elemento)
echo $elemento,' ';
echo "\n",$sdll->count();
?>
Saída
3
1 2 3
0
Com o método shift, podemos remove elemento na posição inicial de uma
SplDoublyLinkedList. Esse elemento é retornado pelo método.
Sintaxe
shift(): mixed
Onde
-
Retorno
Elemento na primeira posição
Exceção
Lança RuntimeException se SplDoublyLinkedList vazia.
Exemplo
<?php
$sdll = new SplDoublyLinkedList();
$sdll->push(1);
$sdll->push(2);
$sdll->push(3);
echo $sdll->count(),"\n";
echo "elemento removido:",$sdll->shift(),"\n";
echo $sdll->count();
?>
Saída
3
elemento removido:1
2
Com o método top podemos recuperar o elemento contido no fim de uma
SplDoublyLinkedList. O elemento não é removido após a execução do método.
Sintaxe
top(): mixed
Onde
-
Retorno
Elemento do fim da SplDoublyLinkedList
Exceção
Lança RuntimeException se SplDoublyLinkedList vazia.
Exemplo
<?php
$sdll = new SplDoublyLinkedList();
$sdll->push(1);
$sdll->push(2);
echo $sdll->count(),"\n";
echo "top:",$sdll->top(),"\n";
echo $sdll->count();
?>
Saída
2
top:2
2
O método unshift adiciona um elemento no início de em uma SplDoublyLinkedList.
Esse método não retorna nenhum valor e recebe um elemento como argumento.
Sintaxe
unshift(mixed $value): void
Onde
$value: valor que será adicionado
Retorno
Elemento na primeiro posição
Exceção
Lança RuntimeException se SplDoublyLinkedList vazia.
Exemplo
<?php
$sdll = new SplDoublyLinkedList();
$sdll->push(1);
$sdll->push(2);
$sdll->unshift(-1);
echo $sdll[0];
?>
Saída
-1
O método next é utilizado para mover o iterador para o próximo elemento de
uma SplDoublyLinkedList. Esse método não recebe argumentos e não possui valor
de retorno.
Sintaxe
next(): void
Onde
-
Retorno
-
Exemplo
<?php
$sdll = new SplDoublyLinkedList();
$sdll->push(-1);
$sdll->push(-2);
$sdll->rewind(); //-1
$sdll->next(); //-2
echo $sdll->current();
?>
Saída
-2
O método rewind retorna a posição do iterador para a posição do primeiro
elemento de uma SplDoublyLinkedList. Nenhum argumento é recebido e não
há retorno.
Sintaxe
rewind(): void
Onde
-
Retorno
-
Exemplo
<?php
$sdll = new SplDoublyLinkedList();
$sdll->push(-1);
$sdll->push(-2);
$sdll->push(-3);
$sdll->push(-4);
$sdll->rewind(); //-1
$sdll->next(); //-2
echo $sdll->current();
?>
Saída
-2
O método serialize converte uma SplDoublyLinkedList para uma string
em um formato legível contendo seus elementos com índice e valor separados por (;).
Sintaxe
serialize(): ?string
Onde
-
Retorno
String com elementos no formato índice:valor;
Exemplo
<?php
$sdll = new SplDoublyLinkedList();
$sdll->push(-1);
$sdll->push(-2);
$ser = $sdll->serialize();
echo $ser;
?>
Saída
i:0;:i:-1;:i:-2;
O método unserialize converte uma string serializada pelo método
serialize, ou no mesmo formato retornado por esse método, de volta para
uma SplDoublyLinkedList.
Sintaxe
unserialize(string $data): void
Onde
$data: string com elementos serializados no formato utilizado pelo método serialize.
Retorno
SplDoublyLinkedList convertida a partir de $data
Exemplo
<?php
$sdll = new SplDoublyLinkedList();
$sdll->push(-1);
$sdll->push(-2);
$ser = $sdll->serialize();
echo $ser,"\n";
$sdll->unserialize($ser);
var_dump($sdll);
?>
Saída
i:0;:i:-1;:i:-2;
object(SplDoublyLinkedList)#1 (2) {
["flags":"SplDoublyLinkedList":private]=>
int(0)
["dllist":"SplDoublyLinkedList":private]=>
array(2) {
[0]=>
int(-1)
[1]=>
int(-2)
}
}
Com o método valid podemos verificar se a posição atual do iterador é
válida para utilizar métodos current ou next, por exemplo. Esse
método não possui argumento e returna um booleano.
Sintaxe
valid(): bool
Onde
-
Retorno
true(1) se posição do iterador é válida, false(0) caso contrário.
Exemplo
<?php
$sdll = new SplDoublyLinkedList();
$sdll->push(-1);
$sdll->push(-2);
$sdll->push(-3);
$sdll->rewind(); //1
$sdll->next(); //2
echo $sdll->valid();
?>
Saída
1
Histórico de atualizações
- 25/08/2025 - revisão 4 - Ajustes: pontuais, objetivos e sintaxes
- 20/09/2024 - revisão 3 - Correções em 'Removendo elemento', sintaxe 'bottom', descrição 'key'; outros ajustes
- 03/09/2024 - revisão 2 - Correção em links de objetivos
- 06/02/2024 - revisão 1 - correção em navegação, descrição de métodos e erros gramaticais
- 20/09/2023 - versão inicial
Os cursos oferecidos nesta página são cursos fornecidos por parceiros. Ao comprar um curso clicando
em seu banner, você está ajudando a manter o projeto TutorialDev vivo. Os sites dos cursos parceiros utilizam cookies.