de-vraag
  • Otázky
  • Značky
  • Používatelia
Oznámenia
Odmeny
Registrácia
Po registrácii budete informovaní o odpovediach a komentároch na vaše otázky.
Prihlásiť sa
Ak už máte konto, prihláste sa a skontrolujte nové oznámenia.
Za pridané otázky, odpovede a komentáre budú udelené odmeny.
Viac na
Zdroj
Upraviť
 Ben
Ben
Question

Odstránenie prvku z poľa v jazyku PHP

Existuje jednoduchý spôsob, ako odstrániť prvok z poľa pomocou PHP tak, aby foreach ($array) už neobsahoval tento prvok?

Myslel som si, že to urobí nastavenie hodnoty null, ale zrejme to nefunguje.

2349 2008-12-15T20:28:55+00:00 3
 Star
Star
Edited question 17 október 2019 в 10:22
Programovanie
arrays
php
unset
This question has 1 odpoveď in English, to read them log in to your account.
Solution / Answer
Konrad Rudolph
Konrad Rudolph
15 december 2008 в 8:30
2008-12-15T20:30:46+00:00
Viac na
Zdroj
Upraviť
#8693260

Existujú rôzne spôsoby vymazania prvku poľa, pričom niektoré z nich sú pre niektoré špecifické úlohy užitočnejšie ako iné.

Odstránenie jedného prvku poľa

Ak chcete odstrániť len jeden prvok poľa, môžete použiť \unset() alebo alternatívne \array_splice().

Ak máte hodnotu a nepoznáte kľúč na vymazanie prvku, môžete použiť \array_search() na získanie kľúča.

\unset() metóda

Všimnite si, že pri použití funkcie \unset() sa kľúče poľa nezmenia/neindexujú. Ak chcete kľúče reindexovať, môžete po funkcii \unset() použiť \array_values(), ktorá prevedie všetky kľúče na číselné vymenované kľúče počnúc od 0.

Kód

<?php

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

?>

Výstup

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

\array_splice() metóda

Ak použijete metódu \array_splice(), kľúče sa automaticky reindexujú, ale asociatívne kľúče sa nezmenia, na rozdiel od metódy \array_values(), ktorá prevedie všetky kľúče na číselné kľúče.

Aj \array_splice() potrebuje ako druhý parameter offset, nie kľúč!

Kód

<?php

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

?>

Výstup

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

array_splice() rovnako ako \unset() berú pole odkazom, a to znamená, že nechcete priradiť návratové hodnoty týchto funkcií späť do poľa.

Odstránenie viacerých prvkov poľa

Ak chcete odstrániť viac prvkov poľa a nechcete viackrát volať funkcie \unset() alebo \array_splice(), môžete použiť funkcie \array_diff() alebo \array_diff_key() podľa toho, či poznáte hodnoty alebo kľúče prvkov, ktoré chcete odstrániť.

\array_diff() metóda

Ak poznáte hodnoty prvkov poľa, ktoré chcete odstrániť, môžete použiť funkciu \array_diff(). Rovnako ako predtým pri \unset() sa nezmenia/neindexujú kľúče poľa.

Kód

<?php

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

?>

Výstup

[
    [1] => b
]

\array_diff_key() metóda

Ak poznáte kľúče prvkov, ktoré chcete vymazať, potom použite \array_diff_key(). Tu sa musíte uistiť, že v druhom parametri odovzdávate kľúče ako kľúče a nie ako hodnoty. V opačnom prípade musíte pole otočiť pomocou \array_flip(). A tiež sa tu kľúče nebudú meniť/redexovať.

Kód

<?php

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

Výstup

[
    [1] => b
]

Ak chcete použiť \unset() alebo \array_splice() na vymazanie viacerých prvkov s rovnakou hodnotou, môžete použiť \array_keys() na získanie všetkých kľúčov pre určitú hodnotu a potom vymazať všetky prvky.

Peter Mortensen
Peter Mortensen
Edited answer 19 február 2019 в 10:51
2689
0
Stefan Gehrig
Stefan Gehrig
15 december 2008 в 9:25
2008-12-15T21:25:12+00:00
Viac na
Zdroj
Upraviť
#8693262

Je potrebné poznamenať, že unset() zachová indexy nedotknuté, čo je to, čo by ste očakávali pri použití reťazcových indexov (pole ako hashtable), ale môže to byť dosť prekvapujúce pri práci s celočíselnými indexovanými poľami:

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

Takže array_splice() môžete použiť, ak chcete normalizovať vaše celočíselné kľúče. Ďalšou možnosťou je použitie 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)
} */
 Ry-
Ry-
Edited answer 13 január 2012 в 5:32
1343
0
Eran Galperin
Eran Galperin
15 december 2008 в 8:31
2008-12-15T20:31:31+00:00
Viac na
Zdroj
Upraviť
#8693261
unset($array[$index]);
80
0
Pridať otázku
Kategórie
Všetky
Technológia
Kultúra / Rekreácia
Život / Umenie
Veda
Profesionálne
Obchod
Používatelia
Všetky
New
Popular
1
Jasur Fozilov
Registered pred 9 hodinami
2
Zuxriddin Muydinov
Registered pred dňom
3
Денис Анненский
Registered pred 3 dňami
4
365
Registered pred týždňom
5
True Image
Registered pred týždňom
BG
DA
DE
EL
ES
FI
FR
ID
IT
JA
KO
LV
NL
PT
RU
SK
TR
ZH
© de-vraag 2022
Zdroj
stackoverflow.com
na základe licencie cc by-sa 3.0 s uvedením autora