Używam in_array()
do sprawdzania, czy wartość istnieje w tablicy takiej jak poniżej,
$a = array("Mac", "NT", "Irix", "Linux");
if (in_array("Irix", $a))
{
echo "Got Irix";
}
//print_r($a);
ale co z tablicą wielowymiarową (poniżej) - jak mogę sprawdzić tę wartość, czy istnieje w tablicy wielowymiarowej?
$b = array(array("Mac", "NT"), array("Irix", "Linux"));
print_r($b);
czy nie powinienem używać, in_array()
jeśli chodzi o tablicę wielowymiarową?
php
arrays
multidimensional-array
laukok
źródło
źródło
var_dump(array_sum(array_map(function ($tmp) {return in_array('NT',$tmp);}, $multiarray)) > 0);
$multiarray = array( "Hello", array("Mac", "NT"), array("Irix", "Linux"));
$tmp
jest tablicą zis_array()
funkcją. Jeśli nie tablica - przejdź do innego scenariusza.Odpowiedzi:
in_array()
nie działa na tablicach wielowymiarowych. Możesz napisać funkcję rekurencyjną, aby to zrobić za Ciebie:Stosowanie:
źródło
_r
analogiczne doprint_r()
, na przykład). Opada na wszystkie zagnieżdżone tablice, aby wyszukać wartość, dopóki nie będzie już więcej tablic do znalezienia. W ten sposób możesz przeszukiwać tablice o dowolnej złożoności zamiast głębokości zaledwie dwóch poziomów.Jeśli wiesz, w której kolumnie szukać, możesz użyć array_search () i array_column ():
Ten pomysł znajduje się w sekcji komentarzy do array_search () w podręczniku PHP;
źródło
array_column
To też zadziała.
Stosowanie:
źródło
foreach
pętlą.$array
ma pasujący klucz asocjacyjny$item
. Nie wspominając już o możliwości niezamierzonego dopasowania części łańcucha, gdy w samym łańcuchu występuje podwójny cudzysłów. Ufałbym tej funkcji tylko w małych / prostych sytuacjach, takich jak to pytanie.$item
zawiera znaki, które psują pierwszy parametr (wyrażenie regularne)preg_match
To zrobi to:
in_array
działa tylko na jednowymiarowej tablicy, więc musisz zapętlić każdą pod-tablicę i uruchomićin_array
na każdej z nich.Jak zauważyli inni, dotyczy to tylko dwuwymiarowej tablicy. Jeśli masz więcej zagnieżdżonych tablic, lepsza byłaby wersja rekurencyjna. Przykłady tego można znaleźć w innych odpowiedziach.
źródło
)
Brakuje na końcu wspomnianej linii.in_array()
z trzecim parametrem ustawionym natrue
. Sprawdź tutaj, dlaczego: stackoverflow.com/questions/37080581/...jeśli twoja tablica tak
Użyj tego
przykład:
echo in_multiarray("22", $array,"Age");
źródło
źródło
array_column()
Świetna funkcja, ale nie działała dla mnie, dopóki nie dodałem
if($found) { break; }
doelseif
źródło
Dla dzieci wielowymiarowych:
in_array('needle', array_column($arr, 'key'))
Dla dzieci jednowymiarowych:
in_array('needle', call_user_func_array('array_merge', $arr))
źródło
array_column()
metody,call_user_func_array('array_merge')
metoda ta działa również z podrzędnymi tablicami indeksowymi, +1Zawsze możesz serializować swoją wielowymiarową tablicę i wykonać
strpos
:Różne dokumenty dotyczące rzeczy, których użyłem:
źródło
Od PHP 5.6 jest lepszy i czystszy rozwiązanie dla oryginalnej odpowiedzi:
Dzięki takiej wielowymiarowej tablicy:
Możemy użyć operatora splat :
Jeśli masz takie klucze łańcuchowe:
Będziesz musiał użyć
array_values
, aby uniknąć błęduCannot unpack array with string keys
:źródło
Przyjętego rozwiązania (w momencie pisania) przez jwueller
Jest całkowicie poprawny, ale może mieć niezamierzone zachowanie podczas słabego porównywania (parametr
$strict = false
).Z powodu żonglowania typami PHP podczas porównywania wartości różnych typów
i
Ocenia,
true
ponieważ"example"
jest rzutowanyint
i przekształcany w0
.(Zobacz Dlaczego PHP uważa 0 za ciąg znaków? )
Jeśli nie jest to pożądane zachowanie , wygodne może być rzutowanie wartości liczbowych na łańcuch przed wykonaniem nieścisłego porównania:
źródło
Jest to pierwsza funkcja tego typu, którą znalazłem w podręczniku php dla in_array . Funkcje w sekcjach komentarzy nie zawsze są najlepsze, ale jeśli to nie pomoże, możesz też tam zajrzeć :)
źródło
Oto moja propozycja oparta na rozwiązaniu json_encode () z:
Jeśli słowo nie zostanie znalezione, nadal zwraca 0 równe false .
Mam nadzieję, że to pomoże.
źródło
00
do10000
lublo
doHello
. Ponadto zawiedzie, jeśli igła zawiera dowolny znak, któryjson_encode
ucieka , na przykład podwójne cudzysłowy.Wierzę, że w dzisiejszych czasach możesz po prostu używać array_key_exists :
źródło
Szukałem funkcji, która pozwoliłaby mi wyszukać zarówno łańcuchy, jak i tablice (jako igłę) w tablicy (stóg siana), więc dodałem do odpowiedzi @jwueller .
Oto mój kod:
źródło
Działa również, tworząc najpierw nowy jednowymiarowy Array z oryginalnego.
źródło
Krótsza wersja dla tablic wielowymiarowych utworzonych na podstawie zestawów wyników bazy danych.
Zwróci, jeśli tablica $ os_list zawiera „XP” w polu os_version.
źródło
Znalazłem naprawdę małe proste rozwiązanie:
Jeśli twoja tablica to:
wtedy kod będzie wyglądał następująco:
źródło
Użyłem tej metody działa dla dowolnej liczby zagnieżdżonych i nie wymaga hakowania
źródło
Proszę spróbować:
Nie jestem pewien co do potrzeby, ale może to działać w zależności od potrzeb
źródło
$b
Klucze tablic są tylko liczbami całkowitymi ... nie ma określonych kluczy w tych tablicach ... iarray_keys($b["irix"])
po prostu wyrzucą błąd, ponieważ$b["irix"]
nie istnieje.co z wyszukiwaniem tablicy? wydaje się, że jest to znacznie szybsze niż foreach według https://gist.github.com/Ocramius/1290076 ..
źródło
możesz użyć w ten sposób
http://php.net/manual/tr/function.array-intersect.php
źródło