- Jaki jest najskuteczniejszy sposób sprawdzenia, czy tablica jest płaską tablicą wartości pierwotnych, czy też tablicą wielowymiarową ?
- Czy istnieje sposób, aby to zrobić bez faktycznego przeglądania tablicy i uruchamiania
is_array()
na każdym z jej elementów?
137
Odpowiedzi:
Krótka odpowiedź brzmi: nie, nie możesz tego zrobić bez przynajmniej niejawnego zapętlenia, jeśli „drugi wymiar” może być gdziekolwiek. Jeśli ma być w pierwszej pozycji, po prostu zrób
Ale najbardziej wydajnym sposobem, jaki mogłem znaleźć, jest użycie pętli foreach w tablicy, skracając za każdym razem, gdy zostanie znalezione trafienie (przynajmniej niejawna pętla jest lepsza niż prosta for ()):
Niejawne zapętlenie, ale nie możemy zwierać, gdy tylko zostanie znalezione dopasowanie ...
źródło
is_multi()
zoptymalizuj kod, wykonującreturn count($rv)>0
Użyj count () dwukrotnie; jeden raz w trybie domyślnym i jeden raz w trybie rekurencyjnym. Jeśli wartości są zgodne, tablica nie jest wielowymiarowa, ponieważ tablica wielowymiarowa miałaby wyższą liczbę rekurencyjną.
Ta druga wartość opcji
mode
została dodana w PHP 4.2.0. Z dokumentów PHP :Jednak ta metoda nie wykrywa
array(array())
.źródło
Dla PHP 4.2.0 lub nowszego:
źródło
array(array())
aniarray(array(), array())
jednego. Ogólnie rzecz biorąc, jeśli tablica wewnętrzna jest pusta, licznik rekurencyjny poprawnie doda do niej 0, dzięki czemu będzie pasował do normalnej liczby.Myślę, że jest to najprostsza droga i najnowocześniejsza:
źródło
Możesz po prostu wykonać to:
Jeśli opcjonalny parametr trybu jest ustawiony na
COUNT_RECURSIVE
(lub 1), funkcja count () będzie rekurencyjnie zliczać tablicę. Jest to szczególnie przydatne do liczenia wszystkich elementów tablicy wielowymiarowej.Jeśli jest taki sam, oznacza to, że nigdzie nie ma podpoziomów. Łatwo i szybko!
źródło
if(count($tasks_by_date) !== count($tasks_by_date, 1))
!==
został użyty do zobaczenia, że istnieje poziom niższy . Teorie, które mogą szukać czegoś podobnego ... itd.!==
Możesz sprawdzić
is_array()
pierwszy element, zakładając, że jeśli pierwszy element tablicy jest tablicą, to reszta też jest.źródło
if( is_array(current($arr)) ) { // is multidimensional }
Wszystkie świetne odpowiedzi ... oto moje trzy linijki, których zawsze używam
źródło
Ta funkcja zwróci liczbę int wymiarów tablicy (skradzionych stąd ).
źródło
Myślę, że przekonasz się, że ta funkcja jest najprostszym, najbardziej wydajnym i najszybszym sposobem.
Możesz to przetestować w ten sposób:
źródło
foreach($a as $v) is_array($v) ? return TRUE : return FALSE;
foreach($a as $v) return is_array($v) ? true : false;
Po PHP 7 możesz po prostu zrobić:
źródło
Możesz również wykonać prostą kontrolę, taką jak ta:
źródło
Spróbuj w następujący sposób
źródło
Nawet to działa
Jeśli fałsz jest to tablica jednowymiarowa, jeśli prawda, to tablica wielowymiarowa .
current da ci pierwszy element twojej tablicy i sprawdzi, czy pierwszy element jest tablicą, czy nie za pomocą funkcji is_array .
źródło
Nie używaj COUNT_RECURSIVE
kliknij tę witrynę, aby dowiedzieć się, dlaczego
użyj rsort, a następnie użyj isset
źródło
W moim przypadku. Utknąłem w różnych dziwnych warunkach.
Pierwszy przypadek =
array("data"=> "name");
Drugi przypadek =
array("data"=> array("name"=>"username","fname"=>"fname"));
Ale jeśli
data
ma tablicę zamiast wartości, to funkcja sizeof () lub count () nie będzie działać dla tego warunku. Następnie tworzę funkcję niestandardową do sprawdzenia.Jeśli pierwszy indeks tablicy ma wartość to zwraca "jedyną wartość"
Ale jeśli indeks ma tablicę zamiast wartości to zwraca "ma tablicę"
Używam w ten sposób
Specjalne podziękowania dla Vinko Vrsalovica
źródło
Myślę, że ten jest elegancki (rekwizyty dla innego użytkownika, którego nie znam):
źródło
Wszystkie powyższe metody są zbyt skomplikowane, aby można je było szybko wdrożyć. Jeśli tablica jest płaska, testowanie pierwszego elementu powinno zwrócić prymityw, np. Int, string, itp. Jeśli jest wielowymiarowy, powinien zwrócić tablicę. Dzięki temu możesz używać tej jednej wkładki szybko i schludnie.
jeśli zwraca prawdę, tablica jest wielowymiarowa. W przeciwnym razie jest płaski. Warto zauważyć, że bardzo rzadko tablice mają różne wymiary, np. Jeśli generujesz dane z modelu, zawsze będzie on miał ten sam typ wielowymiarowej lub płaskiej struktury, przez którą można przechodzić przez pętle. Jeśli tak nie jest, to zbudowałeś go ręcznie, co oznacza, że wiesz, gdzie wszystko będzie, i po prostu działa bez konieczności pisania algorytmu zapętlenia
źródło
array_shift()
, ponieważ usuwa pierwszy element, a także resetuje klawisze numeryczne! Lepiej używać,current()
jeśli nadal swędzi się na jedną wkładkę.Oprócz wcześniejszych odpowiedzi iw zależności od schematu tablicy, którą chcesz sprawdzić:
źródło
To jest tak proste, jak
źródło
Oto ładna jedna wkładka. Iteruje po każdym kluczu, aby sprawdzić, czy wartość w tym kluczu jest tablicą. To zapewni prawdę
źródło
źródło
if (isset($array[0])) { }
. Jeśli jesteś pewien, że indeksy tablicy zaczynają się od 0* tylko do tych tablic z indeksem numerycznym
źródło
Natywna funkcja print_r zwraca ciąg czytelny dla człowieka. Po prostu policz instancje „Array”.
próbować...
Na moim pudełku „is_multi zajęło 0,83681297302246 sekund 500000 razy”
Dzięki uprzejmości: Ruach HaKodesh
źródło
źródło
Bez pętli, jasne i proste.
Działa również z tablicami skojarzonymi, a nie tylko tablicami numerycznymi, które nie mogą zawierać 0 (tak jak w poprzednim przykładzie wyświetli ostrzeżenie, jeśli tablica nie ma 0).
źródło