Jak usunąć element z tablicy, gdy znam nazwy elementów? na przykład:
Mam tablicę:
$array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
użytkownik wchodzi strawberry
strawberry
jest usunięty.
Aby w pełni wyjaśnić:
Mam bazę danych, która przechowuje listę elementów oddzielonych przecinkami. Kod wciąga listę na podstawie decyzji użytkownika, gdzie ten wybór się znajduje. Tak więc, jeśli wybiorą truskawkę, kod wciąga w każdym wpisie, w którym znajduje się truskawka, a następnie konwertuje to na tablicę za pomocą funkcji split (). Chcę, aby usunęli wybrane przez użytkownika elementy, na przykład truskawka, z tablicy.
Odpowiedzi:
Użyj,
array_search
aby uzyskać klucz i usuń go za pomocąunset
:array_search
zwraca false ( null do PHP 4.2.0), jeśli nie znaleziono żadnego elementu.A jeśli może istnieć wiele elementów o tej samej wartości, możesz użyć,
array_keys
aby uzyskać klucze do wszystkich elementów:źródło
$submenuArray
? (Zauważ, że każda pętla$submenuArray
zostanie nadpisana.)Użyj
array_diff()
dla rozwiązania 1-liniowego:... Nie ma potrzeby stosowania dodatkowych funkcji ani pętli dla wszystkich.
źródło
strawberry
nie ma go w początkowej tablicy, stanie się dostępny w$array_without_strawberries
tablicy - niebezpieczny kod, jeśli chcesz mieć pewność, że dany element nie znajduje się w tablicy.$a = array_diff(array(), array('strawberry'));
- $ a to pusta tablica.źródło
$my_array = array_values($my_array);
.in_array
iarray_search
). Użycie zwrotuarray_search
jak w odpowiedzi Gumbo jest bardziej efektywneJeśli używasz tutaj zwykłej tablicy (co wydaje się być przypadkiem), powinieneś zamiast tego użyć tego kodu:
unset($array[$key])
usuwa tylko element, ale nie zmienia kolejności w zwykłej tablicy.Podobno mamy tablicę i używamy array_splice:
W porównaniu do nieuzbrojonego:
Zwróć uwagę, jak
unset($array[$key])
nie zmienia kolejności tablicy.źródło
unset
nic nie zwraca. Więcjson_encode(unset($array[2]))
nie jest to jest właściwa dla porównania.Możesz użyć filtru tablicy, aby usunąć elementy według określonego warunku
$v
:źródło
array_filter()
. Chociaż osobiście używałbym anonimowej funkcji w mojej implementacji, uważam, że właściwym działaniem na SO byłoby skomentowanie lub edycja odpowiedzi D.Martina, jeśli chcesz wprowadzić mikro-ulepszenie, aby ta strona nie była rozdęta. Usuń tę zduplikowaną odpowiedź.Będzie tak:
źródło
Jest to proste powtórzenie, które może usunąć wiele wartości z tablicy.
źródło
array_diff()
. Jak udało się to zdobyć trzy głosy za. Nikt nie powinien uważać tej odpowiedzi za pomocną ani wykorzystywać jej we własnych projektach. Zalecam usunięcie tej odpowiedzi - pomogłoby to uwolnić Twoje konto od odpowiedzi o niskiej jakości, zmniejszyć nadmiar odpowiedzi na tej stronie i zdobyć odznakę zdyscyplinowania. Odłożę mój głos przeciw, abyś miał czas na usunięcie w celu uzyskania nagrody.Po prostu możesz zrobić pojedynczą linię. To usunie element z tablicy
źródło
Obecnie używam tej funkcji:
Możesz wprowadzić tablicę lub tylko ciąg znaków z elementami, które powinny zostać usunięte. Napisz to tak:
LUB
$detils = array_delete('orange', $detils);
Zindeksuje go również.
źródło
Na to pytanie jest kilka odpowiedzi ale chcę dodać coś więcej bo gdy użyłem
unset
lubarray_diff
miałem kilka problemów z zabawą z indeksami nowej tablicy gdy dany element został usunięty (bo indeks początkowy jest zapisywany)Wracam do przykładu:
lub
Jeśli wydrukujesz wynik, otrzymasz:
Wynik:
Ale indeksy zostaną zapisane i będziesz mieć dostęp do swojego elementu, takiego jak:
Dlatego ostateczna tablica nie jest ponownie indeksowana. Musisz więc dodać po
unset
lubarray_diff
:Po tym twoja tablica będzie miała normalny indeks:
Powiązane z tym postem: Ponowne indeksowanie tablicy
Mam nadzieję, że to pomoże
źródło
Lepszym podejściem może być zachowanie wartości jako kluczy w tablicy asocjacyjnej, a następnie wywołanie
array_keys()
jej, gdy chcesz rzeczywistą tablicę. W ten sposób nie musisz używać,array_search
aby znaleźć swój element.źródło
Odpowiedź na usunięcie tablicy PHP według wartości (nie klucza) Podana przez https://stackoverflow.com/users/924109/rok-kralj
IMO jest najlepszą odpowiedzią, ponieważ usuwa i nie mutuje
Ładnie uogólnia, możesz usunąć tyle elementów, ile chcesz w tym samym czasie, jeśli chcesz.
Zastrzeżenie: Zauważ, że moje rozwiązanie tworzy nową kopię tablicy, zachowując starą nienaruszoną, w przeciwieństwie do akceptowanej odpowiedzi, która ulega mutacji. Z tego powodu może być nieco wolniejszy.
źródło
Szukałem odpowiedzi na to samo pytanie i trafiłem na ten temat. Widzę dwa główne sposoby: połączenie
array_search
&unset
i użyciearray_diff
. Na pierwszy rzut oka wydawało mi się, że pierwsza metoda byłaby szybsza, ponieważ nie wymaga tworzenia dodatkowej tablicy (jak przy użyciuarray_diff
). Ale napisałem mały test porównawczy i upewniłem się, że druga metoda jest nie tylko bardziej zwięzła, ale także szybsza! Cieszę się, że mogę się tym z tobą podzielić. :)https://glot.io/snippets/f6ow6biaol
źródło
Wolałbym używać array_key_exists do wyszukiwania kluczy w tablicach, takich jak:
Array([0]=>'A',[1]=>'B',['key'=>'value'])
aby skutecznie znaleźć określone, ponieważ array_search i in_array () nie działają tutaj. I usuń rzeczy za pomocą unset () .
Myślę, że to komuś pomoże.
źródło
Utwórz tablicę numeryczną z usunięciem określonej wartości tablicy
Możesz polecić ten link ...
źródło
źródło
Używając
array_seach()
, spróbuj wykonać następujące czynności:array_search()
zwraca klucz znalezionego elementu, którego można użyć do usunięcia tego elementu z oryginalnej tablicy za pomocąunset()
. PowróciFALSE
na niepowodzenie, jednak można go zwrócić wartość „falsey” na sukces (klucz może być0
na przykład), dlatego ścisłe porównanie!==
operator jest używany.if()
Oświadczenie sprawdzi, czyarray_search()
zwrócony wartość i będzie wykonywać jedynie działania, jeśli tak się stało.źródło
źródło
array_search()
-unset()
została już opublikowana przez Johna Conde'a wiele lat przed twoją. Zduplikowane odpowiedzi nie mają wartości dla czytelników i są w rzeczywistości niedogodnością z powodu straty czasu podczas przewijania i czytania zbędnych informacji. Usuń tę odpowiedź.źródło
źródło
źródło