ultimo - unset array php




PHP: Excluir um elemento de um array (20)

Existe uma maneira fácil de excluir um elemento de um array usando PHP , de tal forma que foreach ($array) não inclua mais esse elemento?

Eu pensei que defini-lo para null faria isso, mas aparentemente não funciona.


unset não mude o índice, mas array_splice faz

$arrayName = array( '1' => 'somevalue',
                        '2' => 'somevalue1',
                        '3' => 'somevalue3',
                        500 => 'somevalue500',
                             );


    echo $arrayName['500']; 
    //somevalue500
    array_splice($arrayName, 1,2);

    print_r( $arrayName );
    //Array ( [0] => somevalue [1] => somevalue500 )



    $arrayName = array( '1' => 'somevalue',
                        '2' => 'somevalue1',
                        '3' => 'somevalue3',
                        500 => 'somevalue500',
                             );


    echo $arrayName['500']; 
    //somevalue500
    unset($arrayName[1]);

    print_r( $arrayName );
    //Array ( [0] => somevalue [1] => somevalue500 )

Matrizes associativas

Para matrizes associativas, use unset() :

$arr = array('a' => 1, 'b' => 2, 'c' => 3);
unset($arr['b']);

// RESULT : array('a' => 1, 'c' => 3)

Matrizes numéricas

Para matrizes numéricas, use array_splice() :

$arr = array(1, 2, 3);
array_splice($arr, 1, 1);

// RESULT : array(0 => 1, 1 => 3)

Nota

Usar unset() para matrizes numéricas não produzirá um erro, mas atrapalhará seus índices:

$arr = array(1, 2, 3);
unset($arr[1]);

// RESULT : array(0 => 1, 2 => 3)

Além disso, para um elemento nomeado:

unset($array["elementName"]);

Ao deletar um elemento de um array em PHP, uma boa função a ser usada é a função unset. Aqui está um exemplo de seu uso:

$anArray = array("X", "Y", "Z");

unset($anArray[0]);

//'dumps' the content of $anArray to the page:
var_dump($anArray);  

A saída da função var_dump será:

array(2) { [1]=> string(1) "Y" [2]=> string(1) "Z" }

Eu gostaria apenas de dizer que eu tinha um Objeto em particular, que tinha atributos de variáveis ​​(era basicamente mapear uma tabela e eu estava mudando as colunas na tabela, então os atributos no objeto, refletindo a tabela também variariam

class obj {
    protected $fields = array('field1','field2');
    protected $field1 = array();
    protected $field2 = array();
    protected loadfields(){} 
    // This will load the $field1 and $field2 with rows of data for the column they describe
    protected function clearFields($num){
        foreach($fields as $field) {
            unset($this->$field[$num]); 
            // This did not work the line below worked
            unset($this->{$field}[$num]); // You have to resolve $field first using {}
        }
    }
}

Todo o propósito de $ fields era apenas para que eu não precisasse olhar em todo lugar no código quando eles são alterados, apenas olho para o início da classe e mudo a lista de atributos e o conteúdo da matriz $ fields para refletir o novos atributos.

Demorei um pouco para descobrir isso. Espero que isso possa ajudar alguém.


Existem diferentes maneiras de excluir um elemento de matriz, onde algumas são mais úteis para algumas tarefas específicas do que outras.

Excluir um elemento da matriz

Se você quiser excluir apenas um elemento da matriz, você pode usar unset() ou alternativa array_splice() .

Além disso, se você tiver o valor e não souber a chave para excluir o elemento, use array_search() para obter a chave.

método unset()

Note que quando você usa unset() as chaves do array não serão alteradas / reindexadas. Se você quiser reindexar as chaves, você pode usar array_values() após unset() que irá converter todas as chaves em chaves numéricas enumeradas a partir de 0.

Código

<?php

    $array = array(0 => "a", 1 => "b", 2 => "c");
    unset($array[1]);
               //↑ Key which you want to delete

?>

Saída

Array (
    [0] => a
    [2] => c
)

método array_splice()

Se você usar array_splice() as chaves serão automaticamente reindexadas, mas as chaves associativas não serão alteradas, ao contrário de array_values() que converterá todas as chaves em teclas numéricas.

Também array_splice() precisa do offset, não da chave! como o segundo parâmetro.

Código

<?php

    $array = array(0 => "a", 1 => "b", 2 => "c");
    array_splice($array, 1, 1);
                       //↑ Offset which you want to delete

?>

Saída

Array (
    [0] => a
    [1] => c
)

array_splice() mesmo que unset() pega o array por referência, isso significa que você não quer atribuir os valores de retorno dessas funções de volta ao array.

Excluir vários elementos da matriz

Se você quiser excluir vários elementos do array e não quiser chamar unset() ou array_splice() várias vezes, você pode usar as funções array_diff() ou array_diff_key() dependendo se você conhece os valores ou as chaves dos elementos que você deseja excluir.

método array_diff()

Se você conhece os valores dos elementos da matriz que você deseja excluir, você pode usar array_diff() . Como antes com unset() ele não irá alterar / reindexar as chaves da matriz.

Código

<?php

    $array = array(0 => "a", 1 => "b", 2 => "c");
    $array = array_diff($array, ["a", "c"]);
                              //└────────┘→ Array values which you want to delete

?>

Saída

Array (
    [1] => b
)

método array_diff_key()

Se você souber as chaves dos elementos que deseja excluir, use o array_diff_key() . Aqui você tem que certificar-se de passar as chaves como chaves no segundo parâmetro e não como valores. Caso contrário, você tem que inverter o array com array_flip() . E também aqui as chaves não serão alteradas / reindexadas.

Código

<?php

    $array = array(0 => "a", 1 => "b", 2 => "c");
    $array = array_diff_key($array, [0 => "xy", "2" => "xy"]);
                                   //↑           ↑ Array keys which you want to delete
?>

Saída

Array (
    [1] => b
)

Além disso, se você quiser usar unset() ou array_splice() para excluir vários elementos com o mesmo valor, use array_keys() para obter todas as chaves de um valor específico e, em seguida, exclua todos os elementos.


Para evitar fazer uma busca, pode-se brincar com array_diff :

$array = array(3, 9, 11, 20);
$array = array_diff($array, array(11) ); // removes 11

Neste caso, não é necessário procurar / usar a chave.


Para matrizes associativas, com chaves não inteiras:

Simplesmente, unset($array[$key]) funcionaria.

Para matrizes com chaves inteiras e se você deseja manter suas chaves:

  1. $array = [ 'mango', 'red', 'orange', 'grapes'];

unset($array[2]); $array = array_values($array);

  1. array_splice($array, 2, 1);

Se você precisar remover vários elementos de um array associativo, você pode usar array_diff_key() (aqui usado com array_flip() ):

$my_array = array(
  "key1" => "value 1",
  "key2" => "value 2",
  "key3" => "value 3",
  "key4" => "value 4",
  "key5" => "value 5",
);

$to_remove = array("key2", "key4");

$result = array_diff_key($my_array, array_flip($to_remove));

print_r($result);

Saída:

Array ( [key1] => value 1 [key3] => value 3 [key5] => value 5 ) 

Se você tem uma matriz numericamente indexada onde todos os valores são exclusivos (ou eles não são exclusivos, mas você deseja remover todas as instâncias de um determinado valor), você pode simplesmente usar array_diff () para remover um elemento correspondente, assim:

$my_array = array_diff($my_array, array('Value_to_remove'));

Por exemplo:

$my_array = array('Andy', 'Bertha', 'Charles', 'Diana');
echo sizeof($my_array) . "\n";
$my_array = array_diff($my_array, array('Charles'));
echo sizeof($my_array);

Isso exibe o seguinte:

4
3

Neste exemplo, o elemento com o valor 'Charles' é removido, como pode ser verificado pelas chamadas sizeof () que relatam um tamanho de 4 para a matriz inicial e 3 após a remoção.


Suponha que você tenha essa matriz:

Array
(
    [user_id] => 193
    [storage] => 5
)

Para excluir o storage , faça:

unset($attributes['storage']);
$attributes = array_filter($attributes);

E você tem:

Array
(
    [user_id] => 193
)

Você pode simplesmente usar unset() para deletar um array.

Lembre-se que a matriz deve ser desfeita após a função foreach .


Destrua um único elemento de um array

unset()

$array1 = array('A', 'B', 'C', 'D', 'E');
unset($array1[2]); // Delete known index(2) value from array
var_dump($array1);

A saída será:

array(4) {
  [0]=>
  string(1) "A"
  [1]=>
  string(1) "B"
  [3]=>
  string(1) "D"
  [4]=>
  string(1) "E"
}

Se você precisar re-indexar o array:

$array1 = array_values($array1);
var_dump($array1);

Então a saída será:

array(4) {
  [0]=>
  string(1) "A"
  [1]=>
  string(1) "B"
  [2]=>
  string(1) "D"
  [3]=>
  string(1) "E"
}

Pop o elemento fora do final da matriz - retornar o valor do elemento removido

mixed array_pop(array &$array)

$stack = array("orange", "banana", "apple", "raspberry");
$last_fruit = array_pop($stack);
print_r($stack);
print_r('Last Fruit:'.$last_fruit); // Last element of the array

A saída será

Array
(
    [0] => orange
    [1] => banana
    [2] => apple
)
Last Fruit: raspberry

Remova o primeiro elemento (vermelho) de uma matriz , - retorne o valor do elemento removido

mixed array_shift ( array &$array )

$color = array("a" => "red", "b" => "green" , "c" => "blue");
$first_color = array_shift($color);
print_r ($color);
print_r ('First Color: '.$first_color);

A saída será:

Array
(
    [b] => green
    [c] => blue
)
First Color: red

Remova um elemento da matriz com base na chave:

Use a função unset como abaixo:

$a = array(
    'salam',
    '10',
    1
);

unset( $a[1] );

print_r( $a );

/*

Output:

Array
(
    [0] => salam
    [2] => 1
)

*/

Remova um elemento da matriz com base no valor:

Use a função array_search para obter a chave do elemento e use a maneira acima para remover o elemento da matriz como abaixo:

$a = array(
    'salam',
    '10',
    1
);

$key = array_search( 10, $a );

if( $key !== false ) {
    unset( $a[ $key ] );
}

print_r( $a );

/*

Output:

Array
(
    [0] => salam
    [2] => 1
)

*/

$x = array(1, 2, 3, 4, 5);
var_dump($x);
unset($x[3]); // here is key to be delete
echo '<br>';
array_values($x);
var_dump($x);


  // our initial array  
   $arr = array("blue", "green", "red", "yellow", "green", "orange", "yellow", "indigo", "red");  
  print_r($arr);

  // remove the elements who's values are yellow or red  
   $arr = array_diff($arr, array("yellow", "red"));
  print_r($arr);  

Esta é a saída do código acima:

Array
(
    [0] => blue
    [1] => green
    [2] => red
    [3] => yellow
    [4] => green
    [5] => orange
    [6] => yellow
    [7] => indigo
    [8] => red
)

Array
(
    [0] => blue
    [1] => green
    [4] => green
    [5] => orange
    [7] => indigo
)

Agora, array_values ​​() irá reindexar um array numérico bem, mas irá remover todas as strings do array e substituí-las por números. Se você precisar preservar os nomes das chaves (strings) ou reindexar a matriz se todas as chaves forem numéricas, use array_merge ():

$arr = array_merge(array_diff($arr, array("yellow", "red")));
print_r($arr);

saídas

Array
(
    [0] => blue
    [1] => green
    [2] => green
    [3] => orange
    [4] => indigo
)

$key = array_search($needle,$array);
if($key!==false){
    unset($array[$key]);
}

<?php
    $stack = array("fruit1", "fruit2", "fruit3", "fruit4");
    $fruit = array_shift($stack);
    print_r($stack);

    echo $fruit;
?>

Saída:

Array
(
    [0] => fruit2
    [1] => fruit3
    [2] => fruit4
)

fruit1

<?php 
//If you want to remove a particular array element use this method
$my_array = array("key1"=>"value 1","key2"=>"value 2","key3"=>"value 3");

print_r($my_array);
if(array_key_exists("key1",$my_array)){  
unset($my_array['key1']);
print_r($my_array);
}else{
echo "Key does not exist";
}
?>

<?php 
//To remove first array element
$my_array = array("key1"=>"value 1","key2"=>"value 2","key3"=>"value 3");
print_r($my_array);
$new_array=array_slice($my_array,1); 
print_r($new_array);
?>


<?php 
echo "<br/> ";
//To remove first array element to length
//starts from first and remove two element 
$my_array = array("key1"=>"value 1","key2"=>"value 2","key3"=>"value 3");
print_r($my_array);
$new_array=array_slice($my_array,1,2); 
print_r($new_array);
?>

Saída

 Array ( [key1] => value 1 [key2] => value 2 [key3] => 
 value 3 ) Array (    [key2] => value 2 [key3] => value 3 ) 
 Array ( [key1] => value 1 [key2] => value 2 [key3] => value 3 ) 
 Array ( [key2] => value 2 [key3] => value 3 )
 Array ( [key1] => value 1 [key2] => value 2 [key3] => value 3 ) 
 Array ( [key2] => value 2 [key3] => value 3 ) 

// Remove by value
function removeFromArr($arr, $val)
{
    unset($arr[array_search($val, $arr)]);
    return array_values($arr);
}




arrays