Chcę przejść przez tablicę z, foreach
aby sprawdzić, czy istnieje wartość. Jeśli wartość istnieje, chcę usunąć element, który ją zawiera.
Mam następujący kod:
foreach($display_related_tags as $tag_name) {
if($tag_name == $found_tag['name']) {
// Delete element
}
}
Nie wiem, jak usunąć element po znalezieniu wartości. Jak to usunąć?
Muszę użyć foreach
do tego problemu. Prawdopodobnie istnieją alternatywy foreach
i możesz się nimi podzielić.
$key => &$tag_name
stackoverflow.com/a/2008893/922522json_encode()
. Możesz rozwiązać ten problem za pomocą$display_related_tags = array_values ($display_related_tags);
poforeach
pętli.$projects = array_filter($projects, function ($project) { return count($project->roles) > 0; });
konwertuje wynik na obiekt.Lepszym rozwiązaniem jest skorzystanie z
array_filter
funkcji:Jak czytamy w dokumentacji php :
źródło
ARRAY_FILTER_USE_KEY - pass key as the only argument to callback instead of the value ARRAY_FILTER_USE_BOTH - pass both value and key as arguments to callback instead of the value
Default is 0 which will pass value as the only argument to callback instead.
To powiedziawszy, ponowne przeczytanie odpowiedzi w tym przypadku oczywiście nie miałoby znaczenia, jak twierdzisz.display_related_tags = array_values(display_related_tags);
po niej.źródło
Zamiast wykonywać pętlę foreach () na tablicy, szybsze byłoby użycie funkcji array_search () do znalezienia odpowiedniego klucza. W przypadku małych tablic wybrałbym foreach dla lepszej czytelności, ale w przypadku większych tablic lub często wykonywanego kodu powinno to być nieco bardziej optymalne:
Operator ścisłego porównania! == jest potrzebny, ponieważ array_search () może zwrócić 0 jako indeks zmiennej $ niechciana wartość.
Ponadto powyższy przykład usunie tylko pierwszą wartość $ niechciana wartość, jeśli $ niechciana wartość może wystąpić więcej niż raz w tablicy $, należy użyć array_keys (), aby znaleźć je wszystkie:
Sprawdź http://php.net/manual/en/function.array-search.php, aby uzyskać więcej informacji.
źródło
jeśli masz scenariusz, w którym musisz usunąć więcej niż jedną wartość z tablicy foreach, w tym przypadku musisz przekazać wartość przez odniesienie dla każdego: Próbuję wyjaśnić ten scenariusz:
w drugiej pętli chcesz anulować pierwsze wpisy pętli, nie pojawiają się ponownie w iteracji ze względu na wydajność, ani też nie są usuwane z pamięci, ponieważ w pamięci są obecne i pojawią się w iteracjach.
źródło
Są już odpowiedzi, które pokazują, jak rozbrajać. Zamiast powtarzać kod we wszystkich swoich klasach, spraw, aby działały jak poniżej i używaj go w kodzie, gdy jest to wymagane. W logice biznesowej czasami nie chcesz ujawniać niektórych właściwości. Zobacz poniżej jedno wezwanie do usunięcia
Zadzwoń jak:
źródło
Jak już wspomniano, chciałbyś zrobić foreach z kluczem i wyłączyć go za pomocą klucza - ale pamiętaj, że mutowanie tablicy podczas iteracji jest generalnie złym pomysłem, chociaż nie jestem pewien co do zasad PHP w tym zakresie bezceremonialny.
źródło
foreach
lubfor
ogólnie konstrukcje zamiast iteracji?