Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Luiz Henrique

[Resolvido] Como limpar Array

Recommended Posts

Olá pessoas.

 

Não consigo remover determinado valor de uma tabela:

 #consuta SQL
   $atributo_remove = "valor2";
   $array = $row['atributos']; # valor1,valor2,valor3
   $atributo = explode(",", $array); 
   $total = count($atributo);
   for($i=0; $i<$total; $i++){
   	if($array[$i] == $atributo_remove) {
           unset($array[$i]);
       }
   }

 

Mas não é deletado, aparece o erro:

Fatal error: Cannot unset string offsets

Pelo que pesquisei ocorre o erro porque $atributo não é uma array é uma string, mas então como posso resolver?

 

Fiz uma gambiarra aqui mas não funciona 100%, são os mesmos passos acima, mas no for fiz assim:

   for($i=0; $i<$total; $i++){
   	if($array[$i] != $atributo_remove) {
           $new_atributos = $new_atributos.",".$array[$i];
       }
   }

 

Ele retira o que quero mas fica com ( , ) sobrando, ficaria assim de acordo com o exemplo:

 

valor1,,valor3

 

Sendo que não precisaria da segunda ( , ) ou seja fica um registro em branco e depois na listagem, fica um campo em branco.

 

Alguma ideia de como posso resolver?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olhando rapidamente:

 

// Isso é uma string

$array = $row['atributos']; # valor1,valor2,valor3

// Isso é um array

$atributo = explode(",", $array);

Agora, aqui:

 

unset($array[$i]);

Se fosse possível através de unset(), você estaria arrancando um caractere do meio da string.

 

O galho aqui é que você está pasando para unset() a string $array, sendo que ela só vai ser um array depois de explodida em $atributo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resolvi, faltou pensar, é o calor de 38º rsrsrs...

 

$array = explode(",",$row['atributos']); # já estou convertendo aqui!	
$busca = array_search($atributo_remove, $array); #faço a busca
unset($array[$busca]);#deleto
$newArray = implode(",", $array); #remonto transformando em string novamente!

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faltou apenas uma verificação de segurança pois caso o índice não exista, array_search() vai retornar FALSE.

 

Então...:

 

$array = explode(",",$row['atributos']); # já estou convertendo aqui!

$busca = array_search($atributo_remove, $array); #faço a busca

if( $busca !== FALSE ) {
   unset($array[$busca]);#deleto
}

$newArray = implode(",", $array); #remonto transformando em string novamente!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.