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:

  1. Iterator
  2. Countable
  3. ArrayAccess
  4. 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
-

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

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

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

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
  1. 25/08/2025 - revisão 4 - Ajustes: pontuais, objetivos e sintaxes
  2. 20/09/2024 - revisão 3 - Correções em 'Removendo elemento', sintaxe 'bottom', descrição 'key'; outros ajustes
  3. 03/09/2024 - revisão 2 - Correção em links de objetivos
  4. 06/02/2024 - revisão 1 - correção em navegação, descrição de métodos e erros gramaticais
  5. 20/09/2023 - versão inicial