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.