Vérifier si le tableau est multidimensionnelle ou pas?
- Quel est le moyen le plus efficace pour vérifier si un tableau est un tableau plat
des valeurs primitives ou si c'est un tableau multidimensionnel? - Est-il possible de faire ceci sans boucle par le biais d'un
tableau et en cours d'exécutionis_array()
sur chacun de ses éléments?
- Il est intéressant de souligner que PHP n'a pas de vrai multi-dimensions des tableaux -- juste simple tableau associatif des valeurs. Si votre question est vraiment de se demander "est-il un non-valeur scalaire dans mon tableau"?
- En fait... je ne pense pas que c'est utile de faire remarquer à tous.
Vous devez vous connecter pour publier un commentaire.
La réponse courte est non, vous ne pouvez pas le faire sans au moins une boucle implicitement que si la deuxième dimension " pourrait être n'importe où. Si elle doit être dans le premier point, vous devriez juste faire
Mais, le plus efficace de manière générale j'ai pu trouver est d'utiliser une boucle foreach sur le tableau, de court-circuit à chaque fois qu'un coup est trouvé (au moins la boucle implicite est mieux que la droite pour()):
Implicite en boucle, mais on ne peut pas court-circuit dès qu'une correspondance est trouvée...
is_multi()
optimiser le code en faisantreturn count($rv)>0
Utiliser count() deux fois: une fois en mode par défaut et une fois en mode récursif. Si les valeurs correspondent, le tableau est pas multidimensionnelles, comme un tableau multidimensionnel aurait plus de récursive comte.
Cette option seconde valeur
mode
a été ajouté en PHP 4.2.0. À partir de la PHP Docs:Cependant, cette méthode ne permet pas de détecter
array(array())
.Pour PHP 4.2.0 ou plus récent:
$array = array(1, array())
array(array())
ouarray(array(), array())
soit. Généralement, si à l'intérieur d'un tableau est vide, alors le récursive nombre d'ajouter correctement de 0 pour elle, en faisant ainsi correspondre à la normale à compter.Je pense que c'est le plus simple et c'est l'etat-of-the-art:
Vous pouvez simplement exécuter ce:
Si l'option mode paramètre est réglé sur
COUNT_RECURSIVE
(ou 1), count() sera de manière récursive, à compter de la matrice. Ceci est particulièrement utile pour le comptage de tous les éléments d'un tableau multidimensionnel.Si c'est la même chose, donc il n'y a pas de sous-niveaux n'importe où. Facile et rapide!
if(count($tasks_by_date) !== count($tasks_by_date, 1))
!==
a été utilisé pour voir, c'est sous le niveau de l'existence. Pour les théories qui pourraient être à la recherche de quelque chose de similaire...etc.!==
Vous pouvez regarder à vérifier
is_array()
sur le premier élément, sous l'hypothèse que si le premier élément d'un tableau est un tableau, alors le reste d'entre eux sont trop.if( is_array(current($arr)) ) { // is multidimensional }
Toutes les réponses grands... voici mes trois lignes que je suis toujours à l'aide de
Cette fonction sera de retour int nombre de dimensions du tableau (vol à partir de ici).
Je pense que vous trouverez que cette fonction est la plus simple, la plus efficace et la plus rapide.
Vous pouvez tester de cette façon:
foreach($a as $v) is_array($v) ? return TRUE : return FALSE;
Vous pouvez également faire une vérification simple comme ceci:
Essayer comme suit
Ne pas utiliser COUNT_RECURSIVE
cliquez sur ce site pour savoir pourquoi
utilisation rsort, puis utiliser la fonction isset
Je pense que c'est chic d'accessoires à un autre utilisateur, je ne sais pas son nom d'utilisateur):
Toutes les méthodes ci-dessus sont trop complexes pour un déroulement rapide. Si un tableau est plat, les essais du premier élément doit retourner une primitive de e.g int, string e.t.c. Si elle est multidimensionnelle, elle doit retourner un tableau. Par extension, vous pouvez utiliser ce un liner rapide et soigné.
si cela renvoie true, le tableau est multidimensionnelle. Sinon, il est plat. Juste pour remarque, il est très rare pour les tableaux à avoir des dimensions différentes par exemple, si vous êtes à la production de données à partir d'un modèle, il aura toujours le même type multidimensionnel de plat ou de la structure qui peuvent être traversés par des boucles.
Si ce n'est pas le cas, alors vous avez personnalisé construit à la main, ce qui signifie que vous savez où tout sera et il fonctionne sans avoir besoin d'écrire un algorithme en boucle
array_shift()
, comme il supprime le premier élément et le réinitialise également les touches numériques de la! Mieux utilisercurrent()
si encore des démangeaisons pour un one-liner.En plus de la réponse à la question précédente et selon le schéma de la matrice que vous voulez vérifier:
Même cela fonctionne
Si faux son un seule dimension tableau si vrai son un multi dimension tableau.
actuel vous donnera le premier élément de votre tableau et vérifiez si le premier élément est un tableau ou pas par is_array fonction.
Dans mon cas. Je l'ai coincé dans varier étrange état.
1er cas =
array("data"=> "name");
2ème cas =
array("data"=> array("name"=>"username","fname"=>"fname"));
Mais si
data
a table au lieu de la valeur de sizeof() ou la fonction count() fonctionnent pas pour cette condition. Puis-je créer une fonction personnalisée pour vérifier.Si le premier indice du tableau ont de la valeur, puis il retourne "seulement valeur"
Mais si l'indice de tableau au lieu de la valeur, puis il retourne "a table"
J'utilise cette façon
Un merci spécial à Vinko Vrsalovic
Son aussi simple que
if (isset($array[0])) { }
. Si vous êtes sûr que les index de la rangée commencer à partir de 0*uniquement pour ces tableaux avec index numérique
Le natif print_r fonction renvoie une chaîne explicite. Compte le nombre de "Tableau" instances.
essayer...
Sur ma boîte, "is_multi a pris 0.83681297302246 secondes dans 500000 fois"
Courtoisie: Ruach HaKodesh
Pas de boucles, pure et simple.
Travaille également en collaboration avec des matrices non seulement des tableaux numériques, qui ne pouvait pas contenir de 0 ( comme dans l'exemple précédent serait de vous jeter un avertissement si le tableau n'ont pas de 0. )