Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Função unset em lista numerada

Na atividade 7 da aula 5 há um exemplo:

<?php 

$idadeList = [21, 23, 19, 25, 30, 41, 18];

unset($idadeList[4]);

Que removeria o dado 25 30 da lista.

A dúvida é: isso reordena os índices? O dado 30 agora está em $idaddeList[4] ou apenas torna vazio o valor de $idadeList[4] ??

3 respostas

Ao usar o unset em um índice, o PHP não irá reordenar os índices. Irá apenas removê-lo da lista. Mantendo o restante do array inalterado. Neste caso, o array ficaria da seguinte forma.

0 => 21

1 => 23

2 => 19

3 => 25

5 => 41

6 => 18

E na verdade, ao remover o índice 4 você está removendo o 5º item deste array. Que neste caso é o número 30. O número 25 está no índice 3!

Lembre-se que os arrays sempre iniciam com o índice 0.

Então $idadeList[4] fica vazio?

Ou o índice 4 desaparece?

tipo:

echo $idadeList[4];

Retornaria uma variável inexistente (não encontrando um endereço associado) ou ele encontraria a variável, mas com um valor vazio?

Não sei se consegui me fazer entender.

solução!

Sempre quando vc usar o unset, o PHP irá remover essa referência/associação da memória. Retornando 'nulo' caso você tente acessa-la. É como se a variável deixasse de existir. E neste caso como estamos falando de um índice em um Array, além disso, o PHP dará um aviso de 'Undefined Offset' ou seja o Índice 4 deixou de existir / não foi definido.

<?php

$idadeList = [21, 23, 19, 25, 30, 41, 18];

unset($idadeList[4]);

var_dump($idadeList[4]);

PHP_EOL;

foreach($idadeList as $indice=>$idade){
    echo $indice . '=>' .$idade . PHP_EOL;
}

Notice: Undefined offset: 4 in D:\Murilo\PHP\Exercicios\index.php 

NULL

0=>21

1=>23

2=>19

3=>25

5=>41

6=>18