Myślę, że array_search jest znacznie bardziej czytelnym kodem niż użycie metody array_diff. Upvote
kendepelchin
@zombat Zastanawiam się, czy kolejność ma coś wspólnego z wynikami. Możliwe, że shuffle umieści szukaną wartość bliżej początku lub końca. Poza tym ... +1
nie zadziała, jeśli $ id jest pierwszym elementem tablicy, lepiej w ten sposób: if (($ key = array_search ($ id, $ items))! == false) unset ($ items [$ key]);
Najpotężniejszym rozwiązaniem byłoby użycie array_filter, które pozwala zdefiniować własną funkcję filtrowania.
Ale niektórzy mogą powiedzieć, że to trochę przesada, w twojej sytuacji ...
Prosta foreachpętla, aby przejść przez tablicę i usunąć element, którego nie chcesz, powinna wystarczyć.
Coś takiego w twoim przypadku powinno prawdopodobnie załatwić sprawę:
foreach($items as $key => $value){if($value == $id){
unset($items[$key]);// If you know you only have one line to remove, you can decomment the next line, to stop looping//break;}}
Odpowiedzi:
Można to osiągnąć za pomocą prostego jednowierszowego.
Mając tę tablicę:
Możesz to zrobić:
A wartość
$arr
będzie:Mam nadzieję, że pomoże to napisać piękny kod.
źródło
array_diff
funkcja jest nieinwazyjne, zwraca nową tablicę.$referenced = array_diff($referenced, $items_to_remove);
Dodaję drugą odpowiedź. Napisałem szybki skrypt testowy, aby wypróbować tutaj różne metody.
Trzecia metoda,
array_keys()
z określonym opcjonalnym parametrem wyszukiwania, wydaje się zdecydowanie najlepszą metodą. Przykład danych wyjściowych:Sądząc po tym, rozwiązaniem, którego wtedy użyłbym, byłoby:
źródło
Co powiesz na:
lub dla wielu wartości:
Zapobiegałoby to również utracie klucza, co jest efektem ubocznym
array_flip()
.źródło
usunąć
$rm_val
z$arr
źródło
Najpotężniejszym rozwiązaniem byłoby użycie
array_filter
, które pozwala zdefiniować własną funkcję filtrowania.Ale niektórzy mogą powiedzieć, że to trochę przesada, w twojej sytuacji ...
Prosta
foreach
pętla, aby przejść przez tablicę i usunąć element, którego nie chcesz, powinna wystarczyć.Coś takiego w twoim przypadku powinno prawdopodobnie załatwić sprawę:
źródło
Wypróbuj array_search ()
źródło
array_keys()
wydaje się, że działa lepiej niżarray_search()
w tym zadaniu.Twoje rozwiązania działają tylko wtedy, gdy masz w tablicy unikalne wartości
Widzieć:
Lepszym sposobem byłoby wyłączenie funkcji array_search , w razie potrzeby w pętli.
źródło
bez klapki:
źródło
źródło
Możesz użyć funkcji array_splice dla tej operacji Ref: array_splice
źródło