Usuwanie elementu z tablicy w PHP

Czy istnieje łatwy sposób na usunięcie elementu z tablicy za pomocą PHP, taki, że foreach ($array) nie zawiera już tego elementu?

Myślałem, że ustawienie go na null da radę, ale najwyraźniej nie działa.

Author: Star, 2008-12-15

30 answers

Istnieją różne sposoby usuwania elementu tablicy, gdzie niektóre z nich są bardziej przydatne do niektórych konkretnych zadań niż inne.

Usuwanie pojedynczego elementu tablicy

Jeśli chcesz usunąć tylko jeden element tablicy możesz użyć unset() lub alternatywnie \array_splice().

Jeśli znasz wartość i nie znasz klucza do usunięcia elementu możesz użyć \array_search() PO klucz. To działa tylko wtedy, gdy element nie występuje więcej niż jeden raz, ponieważ \array_search zwraca tylko pierwsze trafienie.

unset()

Zauważ, że gdy używasz unset() klucze tablicy nie ulegną zmianie. Jeśli chcesz reindeksować klucze, możesz użyć \array_values() po unset(), który skonwertuje wszystkie klucze na numerycznie wyliczone klucze począwszy od 0.

Kod:

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

Wyjście:

[
    [0] => a
    [2] => c
]

\array_splice() metoda

Jeśli użyjesz \array_splice() klucze będą automatycznie reindeksowane, ale klucze asocjacyjne Nie ulegną zmianie - w przeciwieństwie do \array_values(), który konwertuje wszystkie klucze na klucze numeryczne.

\array_splice() wymaga offsetu , a nie klucza , jako drugiego parametru.

Kod:

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

Wyjście:

[
    [0] => a
    [1] => c
]

array_splice(), tak samo jak unset(), weź tablicę według referencji. Wartości zwracanych przez te funkcje nie są przypisywane z powrotem do tablicy.

Usuwanie wielu elementów tablicy

Jeśli chcesz usunąć wiele elementów tablicy i nie chcesz wywoływać unset() lub \array_splice() wiele razy możesz używać funkcji \array_diff() lub \array_diff_key() w zależności od tego, czy znasz wartości lub klucze elementów, które chcesz usunąć.

\array_diff() metoda

Jeśli znasz wartości elementów tablicy, które chcesz usunąć, możesz użyć \array_diff(). Tak jak poprzednio z {[8] } nie zmieni kluczy tablicy.

Kod:

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

Wyjście:

[
    [1] => b
]

\array_diff_key() metoda

Jeśli znasz klucze elementów, które chcesz aby usunąć, należy użyć \array_diff_key(). Musisz upewnić się, że przekazujesz klucze jako klucze w drugim parametrze, a nie jako wartości. Klucze nie będą reniferować.

Kod:

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

Wyjście:

[
    [1] => b
]

Jeśli chcesz użyć unset() lub \array_splice() do usunięcia wielu elementów o tej samej wartości, możesz użyć \array_keys() aby uzyskać wszystkie klucze dla określonej wartości, a następnie usunąć wszystkie elementy.

 3078
Author: Rizier123,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-10-13 16:36:35

Należy zauważyć, że unset() będzie zachowywał indeksy nietknięte, czego można się spodziewać, używając indeksów łańcuchowych( tablica jako hashtable), ale może być dość zaskakujące, gdy mamy do czynienia z tablicami indeksowanymi liczbami całkowitymi:

$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)
} */

Więc array_splice() może być używany, jeśli chcesz znormalizować swoje klucze całkowite. Inną opcją jest użycie array_values() po 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)
} */
 1375
Author: Stefan Gehrig,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-13 17:32:09
  // 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);

To jest wyjście z powyższego kodu:

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
)

Teraz array_values() będzie ładnie reindexować tablicę liczbową, ale usunie wszystkie łańcuchy klawiszy z tablicy i zastąpi je liczbami. Jeśli chcesz zachować nazwy kluczy (ciągi znaków) lub reindex tablicy, jeśli wszystkie klucze są numeryczne, użyj array_merge():

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

Wyjścia

Array
(
    [0] => blue
    [1] => green
    [2] => green
    [3] => orange
    [4] => indigo
)
 387
Author: Marcel Cozma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-02-19 10:52:43
$key = array_search($needle, $array);
if ($key !== false) {
    unset($array[$key]);
}
 215
Author: liamvictor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-02-19 10:54:08
unset($array[$index]);
 93
Author: Eran Galperin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-15 20:31:31

Jeśli masz numerycznie indeksowaną tablicę, gdzie wszystkie wartości są unikalne (lub nie są unikalne, ale chcesz usunąć wszystkie instancje określonej wartości), możesz po prostu użyć array_diff (), aby usunąć pasujący element, jak to:

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

Na przykład:

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

To wyświetla:

4
3

W tym przykładzie element o wartości 'Charles' jest usuwany, co można zweryfikować wywołaniami sizeof (), które zgłaszają rozmiar 4 dla początkowej tablicy, a 3 po usunięcie.

 68
Author: Robin Nixon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-26 08:25:05

Również dla elementu nazwanego:

unset($array["elementName"]);
 68
Author: DefenestrationDay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-11-13 11:05:21
<?php
    $stack = ["fruit1", "fruit2", "fruit3", "fruit4"];
    $fruit = array_shift($stack);
    print_r($stack);

    echo $fruit;
?>

Wyjście:

[
    [0] => fruit2
    [1] => fruit3
    [2] => fruit4
]

fruit1
 37
Author: Saurabh Chandra Patel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-09-03 02:54:10

Niszczenie pojedynczego elementu tablicy

unset()

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

Wyjście będzie:

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

Jeśli chcesz ponownie indeksować tablicę:

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

Wtedy wynik będzie:

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

WyĹ 'Ä ... czenie elementu z koĹ" ca tablicy - zwraca wartoĹ " Ä ‡ usuniÄ ™ tego elementu

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

Wyjście będzie

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

Usuń pierwszy element (czerwony) z tablicy , - return wartość usuniętego elementu

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

Wyjście będzie:

Array
(
    [b] => green
    [c] => blue
)
First Color: red
 36
Author: KTAnj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-25 18:16:34

Aby uniknąć szukania można bawić się array_diff:

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

W tym przypadku nie trzeba szukać/używać klucza.

 28
Author: Mugoma J. Okomba,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-22 22:10:50

Jeśli musisz usunąć wiele wartości w tablicy, a wpisy w niej są obiektami lub danymi strukturalnymi, [array_filter][1] jest najlepszym rozwiązaniem. Te wpisy, które zwracają true z funkcji callback zostaną zachowane.

$array = [
    ['x'=>1,'y'=>2,'z'=>3], 
    ['x'=>2,'y'=>4,'z'=>6], 
    ['x'=>3,'y'=>6,'z'=>9]
];

$results = array_filter($array, function($value) {
    return $value['x'] > 2; 
}); //=> [['x'=>3,'y'=>6,z=>'9']]
 22
Author: spyle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-18 01:40:49

Tablice asocjacyjne

Dla tablic asocjacyjnych, użyj unset:

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

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

Tablice liczbowe

Dla tablic numerycznych, użyj array_splice:

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

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

Uwaga

Za pomocą unset dla tablic numerycznych nie spowoduje błędu, ale spowoduje bałagan w indeksach:

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

// RESULT: array(0 => 1, 2 => 3)
 22
Author: John Slegers,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-02-22 09:51:50

unset() niszczy określone zmienne.

Zachowanie unset() wewnątrz funkcji może się różnić w zależności od rodzaju zmiennej, którą próbujesz zniszczyć.

Jeśli zmienna globalizowana znajduje się wewnątrz funkcji, tylko zmienna lokalna jest niszczona. Zmienna w środowisku wywołującym zachowa tę samą wartość, co przed wywołaniem unset().

<?php
    function destroy_foo()
    {
        global $foo;
        unset($foo);
    }

    $foo = 'bar';
    destroy_foo();
    echo $foo;
?>

Odpowiedzią powyższego kodu będzie bar.

Do unset() zmiennej globalnej wewnątrz funkcja:

<?php
    function foo()
    {
        unset($GLOBALS['bar']);
    }

    $bar = "something";
    foo();
?>
 21
Author: Ankit Aggarwal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-02-19 10:57:21

Jeśli indeks jest określony:

$arr = ['a', 'b', 'c'];
$index = 0;    
unset($arr[$index]);  // $arr = ['b', 'c']

Jeżeli indeks nie jest określony:

$arr = ['a', 'b', 'c'];
$index = array_search('a', $arr); // search the value to find index
if($index !== false){
   unset($arr[$index]);  // $arr = ['b', 'c']
}

Warunek if jest konieczny ponieważ jeśli index nie zostanie znaleziony, unset() automatycznie usunie pierwszy element tablicy, który nie jest tym, czego chcemy.

 21
Author: Ahmad Mobaraki,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-21 12:03:28

Jeśli chcesz usunąć wiele elementów z tablicy asocjacyjnej, możesz użyć array_diff_key () (tutaj używane z 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);

Wyjście:

Array ( [key1] => value 1 [key3] => value 3 [key5] => value 5 ) 
 20
Author: Simon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-20 21:05:31
// Remove by value
function removeFromArr($arr, $val)
{
    unset($arr[array_search($val, $arr)]);
    return array_values($arr);
}
 18
Author: GigolNet Guigolachvili,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-30 12:54:36

Rozwiązania:

  1. aby usunąć jeden element, użyj unset():
unset($array[3]);
unset($array['foo']);
  1. aby usunąć wiele elementów niezgodnych, użyj również unset():
unset($array[3], $array[5]);
unset($array['foo'], $array['bar']);
  1. aby usunąć wiele sąsiednich elementów, użyj array_splice():
array_splice($array, $offset, $length);

Dalsze wyjaśnienie:

Używanie tych funkcji usuwa wszystkie odniesienia do tych elementów z PHP. Jeśli chcesz zachować klucz w tablicy, ale z pustą wartością, Przypisz pusty łańcuch do elementu:

$array[3] = $array['foo'] = '';

Oprócz składni, istnieje logiczna różnica między używaniem unset () a przypisywaniem " do elementu. Pierwszy mówi This doesn't exist anymore, podczas gdy drugi mówi This still exists, but its value is the empty string.

Jeśli masz do czynienia z liczbami, przypisanie 0 może być lepszą alternatywą. Tak więc, gdyby firma zaprzestała produkcji koła zębatego modelu XL1000, zaktualizowałaby swoje zapasy z:

unset($products['XL1000']);
Jeśli jednak tymczasowo zabrakło zębatek XL1000, ale planował otrzymać nową dostawę z fabryki jeszcze w tym tygodniu, jest to lepsze:]}
$products['XL1000'] = 0;

Jeśli unset() element, PHP dostosowuje tablicę tak, aby pętla nadal działała poprawnie. Nie zagęszcza tablicy, aby wypełnić brakujące otwory. To mamy na myśli, gdy mówimy, że wszystkie tablice są asocjacyjne, nawet jeśli wydają się być liczbowe. Oto przykład:

// Create a "numeric" array
$animals = array('ant', 'bee', 'cat', 'dog', 'elk', 'fox');
print $animals[1];  // Prints 'bee'
print $animals[2];  // Prints 'cat'
count($animals);    // Returns 6

// unset()
unset($animals[1]); // Removes element $animals[1] = 'bee'
print $animals[1];  // Prints '' and throws an E_NOTICE error
print $animals[2];  // Still prints 'cat'
count($animals);    // Returns 5, even though $array[5] is 'fox'

// Add a new element
$animals[ ] = 'gnu'; // Add a new element (not Unix)
print $animals[1];  // Prints '', still empty
print $animals[6];  // Prints 'gnu', this is where 'gnu' ended up
count($animals);    // Returns 6

// Assign ''
$animals[2] = '';   // Zero out value
print $animals[2];  // Prints ''
count($animals);    // Returns 6, count does not decrease

To zwiększ tablicę do gęsto wypełnionej tablicy liczbowej, użyj array_values():

$animals = array_values($animals);

Alternatywnie, array_splice () automatycznie reindeksuje tablice, aby uniknąć pozostawiania dziur:

// Create a "numeric" array
$animals = array('ant', 'bee', 'cat', 'dog', 'elk', 'fox');
array_splice($animals, 2, 2);
print_r($animals);
Array
(
    [0] => ant
    [1] => bee
    [2] => elk
    [3] => fox
)

Jest to przydatne, jeśli używasz tablicy jako kolejki i chcesz usunąć elementy z kolejki, jednocześnie zezwalając na losowy dostęp. Aby bezpiecznie usunąć pierwszy lub ostatni element z tablicy, użyj odpowiednio array_shift() i array_pop().

 11
Author: Star,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-02-22 10:06:37

Chciałbym tylko powiedzieć, że miałem konkretny obiekt, który miał zmienne atrybuty (w zasadzie odwzorowywał tabelę i zmieniałem kolumny w tabeli, więc atrybuty w obiekcie, odzwierciedlające tabelę, również się zmieniały):

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 {}
        }
    }
}

Cały cel $fields był po prostu, więc nie muszę szukać wszędzie w kodzie, gdy są zmieniane, po prostu patrzę na początek klasy i zmieniam listę atrybutów i zawartość tablicy $fields, aby odzwierciedlić nowy atrybuty.

 10
Author: Oxydel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-02-19 10:59:09

Użyj array_search, aby pobrać klucz i usunąć go z unset, jeśli zostanie znaleziony:

if (($key = array_search('word', $array)) !== false) {
    unset($array[$key]);
}
 10
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-02-24 11:19:25

Wykonaj domyślne funkcje:

  • PHP: unset

unset() niszczy określone zmienne. Więcej informacji można znaleźć w PHP unset

$Array = array("test1", "test2", "test3", "test3");

unset($Array[2]);
  • PHP: array_pop

Funkcja array_pop() usuwa ostatni element tablicy. Więcej informacji można znaleźć w PHP array_pop

$Array = array("test1", "test2", "test3", "test3");

array_pop($Array);
  • PHP: array_splice

Funkcja array_splice() usuwa wybrane elementy z tablica i zastępuje ją nowymi elementami. Więcej informacji można znaleźć w PHP array_splice

$Array = array("test1", "test2", "test3", "test3");

array_splice($Array,1,2);
  • PHP: array_shift

Funkcja array_shift() usuwa pierwszy element z tablicy. Więcej informacji można znaleźć w PHP array_shift

$Array = array("test1", "test2", "test3", "test3");

array_shift($Array);
 10
Author: msvairam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-10-16 12:34:54

Załóżmy, że masz następującą tablicę:

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

Aby usunąć storage, wykonaj:

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

I otrzymujesz:

Array
(
    [user_id] => 193
)
 9
Author: Tebe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-02-14 06:15:41
<?php
    $array = array("your array");
    $array = array_diff($array, ["element you want to delete"]);
?>

Utwórz swoją tablicę w zmiennej $array i tam, gdzie umieściłem 'element, który chcesz usunąć', umieścisz coś w stylu: "a". A jeśli chcesz usunąć wiele elementów, to: "a", "b".

 9
Author: Joshua Charles Pickwell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-02-22 10:02:51

Dwa sposoby usuwania pierwszej pozycji tablicy z zachowaniem kolejności indeksu oraz jeśli nie znasz nazwy klucza pierwszej pozycji.

Rozwiązanie # 1

// 1 is the index of the first object to get
// NULL to get everything until the end
// true to preserve keys
$array = array_slice($array, 1, null, true);

Rozwiązanie # 2

// Rewinds the array's internal pointer to the first element
// and returns the value of the first array element.
$value = reset($array);
// Returns the index element of the current array position
$key = key($array);
unset($array[$key]);

Dla tych przykładowych danych:

$array = array(10 => "a", 20 => "b", 30 => "c");

Musisz mieć taki wynik:

array(2) {
  [20]=>
  string(1) "b"
  [30]=>
  string(1) "c"
}
 9
Author: Nabi K.A.Z.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-02-22 10:14:59

Unset () wiele, fragmentowanych elementów z tablicy

O ile unset() zostało tu już wspomniane kilka razy, to nie zostało jeszcze wspomniane, że unset() akceptuje wiele zmiennych, co ułatwia usuwanie wielu, nie będących w ciągłej sprzeczności elementów z tablicy w ramach jednej operacji:

// Delete multiple, noncontiguous elements from an array
$array = [ 'foo', 'bar', 'baz', 'quz' ];
unset( $array[2], $array[3] );
print_r($array);
// Output: [ 'foo', 'bar' ]

Unset () dynamicznie

Unset() nie akceptuje tablicy kluczy do usunięcia, więc poniższy kod nie powiedzie się (byłoby nieco łatwiej używać unset () dynamicznie chociaż).

$array = range(0,5);
$remove = [1,2];
$array = unset( $remove ); // FAILS: "unexpected 'unset'"
print_r($array);
Zamiast tego unset () może być używane dynamicznie w pętli foreach:
$array = range(0,5);
$remove = [1,2];
foreach ($remove as $k=>$v) {
    unset($array[$v]);
}
print_r($array);
// Output: [ 0, 3, 4, 5 ]

Usuń klucze tablicy przez skopiowanie tablicy

Jest jeszcze inna praktyka, o której jeszcze nie wspomniano. Czasami najprostszym sposobem pozbycia się pewnych kluczy tablicy jest po prostu skopiowanie $array1 do $ array2.
$array1 = range(1,10);
foreach ($array1 as $v) {
    // Remove all even integers from the array
    if( $v % 2 ) {
        $array2[] = $v;
    }
}
print_r($array2);
// Output: [ 1, 3, 5, 7, 9 ];

Oczywiście ta sama praktyka dotyczy ciągów tekstowych:

$array1 = [ 'foo', '_bar', 'baz' ];
foreach ($array1 as $v) {
    // Remove all strings beginning with underscore
    if( strpos($v,'_')===false ) {
        $array2[] = $v;
    }
}
print_r($array2);
// Output: [ 'foo', 'baz' ]
 8
Author: Kristoffer Bohmann,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-02-14 06:14:48

Usuń element tablicy oparty na kluczu:

Użyj funkcji unset Jak poniżej:

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

unset($a[1]);

print_r($a);

/*

    Output:

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

*/

Usuń element tablicy na podstawie wartości:

Użyj funkcji array_search, aby uzyskać klucz elementu i użyj powyższego sposobu, aby usunąć element tablicy, jak poniżej:

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

*/
 7
Author: MahdiY,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-02-22 10:01:38

Użyj następującego kodu:

$arr = array('orange', 'banana', 'apple', 'raspberry');
$result = array_pop($arr);
print_r($result);
 6
Author: Jens Erat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-02-19 10:55:15
<?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);
?>

Wyjście

 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 )
 6
Author: UMAR FAROOQUE KHAN,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-02-22 09:53:46

Dla tablic asocjacyjnych, z nie-całkowitymi kluczami:

Po Prostu, unset($array[$key]) by zadziałało.

Dla tablic posiadających klucze całkowite i jeśli chcesz zachować swoje klucze:

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

    unset($array[2]);
    $array = array_values($array);
    
  2. array_splice($array, 2, 1);

 6
Author: Rahul Patel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-02-22 10:12:46
$arrayName = array( '1' => 'somevalue',
                    '2' => 'somevalue1',
                    '3' => 'somevalue3',
                  );

print_r($arrayName[1]);
// somevalue
unset($arrayName[1]);

print_r($arrayName);
 3
Author: Javed Khan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-05-29 05:33:25

To może pomóc...

<?php
    $a1 = array("a"=>"red", "b"=>"green", "c"=>"blue", "d"=>"yellow");
    $a2 = array("a"=>"purple", "b"=>"orange");
    array_splice($a1, 0, 2, $a2);
    print_r($a1);
?>

Wynik będzie:

Array ( [0] => purple [1] => orange [c] => blue [d] => yellow )
 2
Author: Klajdi Dosti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-02-22 09:56:25