Vraag PHP: een element uit een array verwijderen


Is er een eenvoudige manier om een ​​element uit een array te verwijderen met PHP, zoals dat foreach ($array) bevat dat element niet langer?

Ik dacht dat het dit zou plaatsen null zou het doen, maar blijkbaar werkt het niet.


1968
2017-12-15 20:28


oorsprong


antwoorden:


Er zijn verschillende manieren om een ​​arrayelement te verwijderen, waarbij sommige meer nuttig zijn voor sommige specifieke taken dan andere.

Wis een arrayelement

Als u slechts één array-element wilt verwijderen dat u kunt gebruiken unset() of alternatief array_splice().

Ook als u de waarde heeft en de sleutel niet kent om het element te verwijderen dat u kunt gebruiken array_search() om de sleutel te halen.

unset() methode

Merk op dat wanneer u gebruikt unset() de array-toetsen zullen niet veranderen / opnieuw indexeren. Als u de toetsen die u kunt gebruiken opnieuw wilt indexeren array_values() na unset() die alle toetsen zal converteren naar numerieke opgesomde toetsen beginnend bij 0.

Code

<?php

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

?>

uitgang

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

array_splice() methode

Als je gebruikt array_splice() de sleutels worden automatisch opnieuw geïndexeerd, maar de associatieve sleutels veranderen niet in tegenstelling tot array_values() die alle toetsen naar numerieke toetsen zal converteren.

Ook array_splice() heeft de offset nodig, niet de sleutel! als de tweede parameter.

Code

<?php

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

?>

uitgang

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

array_splice() hetzelfde als unset() neem de array door verwijzing, dit betekent dat u de retourwaarden van die functies niet terug wilt toewijzen aan de array.

Verwijder meerdere array-elementen

Als u meerdere array-elementen wilt verwijderen en niet wilt bellen unset() of array_splice() meerdere keren kunt u de functies gebruiken array_diff() of array_diff_key() afhankelijk van of u de waarden kent of de sleutels van de elementen die u wilt verwijderen.

array_diff() methode

Als u de waarden weet van de arrayelementen die u wilt verwijderen, kunt u gebruiken array_diff(). Zoals eerder met unset() het zal de sleutels van de array niet veranderen / opnieuw indexeren.

Code

<?php

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

?>

uitgang

Array (
    [1] => b
)

array_diff_key() methode

Als u de sleutels kent van de elementen die u wilt verwijderen, dan wilt u gebruiken array_diff_key(). Hier moet u ervoor zorgen dat u de sleutels als sleutels in de tweede parameter doorgeeft en niet als waarden. Anders moet je de array omdraaien met array_flip(). En ook hier zullen de sleutels niet veranderen / opnieuw indexeren.

Code

<?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
?>

uitgang

Array (
    [1] => b
)

Ook als je wilt gebruiken unset() of array_splice() om meerdere elementen te verwijderen met dezelfde waarde die u kunt gebruiken array_keys() om alle sleutels voor een specifieke waarde te krijgen en verwijder vervolgens alle elementen.


2225
2017-12-15 21:25



het zou genoteerd moeten worden dat unset() houdt indexen ongemoeid, wat je zou verwachten bij het gebruik van string-indexen (array als hashtabel), maar het kan behoorlijk verrassend zijn als het gaat om integer geïndexeerde arrays:

$array = array(0, 1, 2, 3);
unset($array[2]);
var_dump($array);
/* array(3) {
  [0]=>
  int(0)
  [1]=>
  int(1)
  [3]=>
  int(3)
} */

$array = array(0, 1, 2, 3);
array_splice($array, 2, 1);
var_dump($array);
/* array(3) {
  [0]=>
  int(0)
  [1]=>
  int(1)
  [2]=>
  int(3)
} */

Zo array_splice() kan worden gebruikt als u uw integere sleutels wilt normaliseren. Een andere optie is om te gebruiken array_values() na unset():

$array = array(0, 1, 2, 3);

unset($array[2]);
$array = array_values($array);
var_dump($array);
/* array(3) {
  [0]=>
  int(0)
  [1]=>
  int(1)
  [2]=>
  int(3)
} */

1299
2017-08-02 15:57



  // 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);  

Dit is de uitvoer van de bovenstaande code:

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
)

Nu zal array_values ​​() een numerieke array mooi indexeren, maar alle sleutelreeksen uit de array verwijderen en vervangen door getallen. Als u de sleutelnamen (strings) wilt behouden of de array opnieuw wilt indexeren als alle sleutels numeriek zijn, gebruikt u array_merge ():

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

uitgangen

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

320
2017-11-15 11:29



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

175
2017-12-15 20:31



unset($array[$index]);

58
2017-11-26 08:25



Als u een numeriek geïndexeerde array hebt waarin alle waarden uniek zijn (of deze niet-uniek zijn maar u alle instanties van een bepaalde waarde wilt verwijderen), kunt u eenvoudig array_diff () gebruiken om een ​​overeenkomend element te verwijderen, zoals dit:

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

Bijvoorbeeld:

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

Dit toont het volgende:

4
3

In dit voorbeeld wordt het element met de waarde 'Charles' verwijderd, zoals kan worden geverifieerd door de sizeof () aanroepen die een grootte van 4 rapporteren voor de eerste array en 3 na de verwijdering.


55
2017-07-31 01:06



Ook voor een benoemd element:

unset($array["elementName"]);


48
2017-07-19 15:37



Vernietig een enkel element van een array

unset()

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

De uitvoer zal zijn:

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

Als u de array opnieuw moet indexeren:

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

Dan zal de uitvoer zijn:

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

Pop het element aan het einde van de array - retourneer de waarde van het verwijderde element

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

De uitvoer zal zijn

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

Verwijder het eerste element (rood) uit een array, - retourneer de waarde van het verwijderde element

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);

De uitvoer zal zijn:

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

26
2018-06-11 05:51



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

    echo $fruit;
?>

Output:

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

fruit1

22
2017-09-22 04:01