2010-01-23 5 views
18

Existe-t-il un moyen de déterminer le nombre de dimensions dans un tableau PHP?Déterminer le nombre de dimensions dans un tableau PHP

+0

double possible de [y at-il un moyen de savoir comment « profonde » un tableau PHP est?] (http://stackoverflow.com/questions/ 262891/est-il-un-moyen-de-trouver-comment-un-php-array-est-profond) – jeremy

Répondre

16

problème Nice, voici a solution I stole from the PHP Manual:

function countdim($array) 
{ 
    if (is_array(reset($array))) 
    { 
     $return = countdim(reset($array)) + 1; 
    } 

    else 
    { 
     $return = 1; 
    } 

    return $return; 
} 
+13

Ceci n'est pas entièrement correct. Parce qu'il ne teste que le premier élément des tableaux. Cela ne donne donc que le résultat escompté lorsque vous êtes sûr qu'il s'agit d'un tableau de tableaux répartis uniformément. Vous devrez parcourir tous les éléments pour vraiment connaître les profondeurs variables. (Ou peut-être un algorithme spiffy traversal je ne suis pas au courant de) –

4

vous pouvez essayer ceci:

$a["one"]["two"]["three"]="1"; 

function count_dimension($Array, $count = 0) { 
    if(is_array($Array)) { 
     return count_dimension(current($Array), ++$count); 
    } else { 
     return $count; 
    } 
} 

print count_dimension($a); 
+0

Nice, merci –

1

Comme la plupart des langages orientés objet de procédure et, PHP n'implémente pas nativement des tableaux multidimensionnels - il utilise des tableaux imbriqués.

La fonction récursive suggérée par d'autres est désordonnée, mais la chose la plus proche d'une réponse.

C.

1

Celui-ci fonctionne pour les tableaux où chaque dimension ne possède pas le même type d'éléments. Il peut avoir besoin de traverser tous les éléments.

 
$a[0] = 1; 
$a[1][0] = 1; 
$a[2][1][0] = 1; 

function array_max_depth($array, $depth = 0) { 
    $max_sub_depth = 0; 
    foreach (array_filter($array, 'is_array') as $subarray) { 
     $max_sub_depth = max(
      $max_sub_depth, 
      array_max_depth($subarray, $depth + 1) 
     ); 
    } 
    return $max_sub_depth + $depth; 
} 
0

a été corrigée à Some issues with jumping from one function to another in a loop in php


Cette double fonction sera la dernière dimension de chaque tableau dans un $ et quand son pas un tableau plus il fera écho le nombre de boucles qu'il a fait pour y arriver avec un délimiteur |. L'inconvénient de ce code est qu'il ne fait qu'écho et ne peut pas être retourné (normalement).

function cc($b, $n) 
{ 
    $n++.' '; 
    countdim($b, $n); 

} 
function countdim($a, $n = 0) 
{ 
    if(is_array($a)) 
    { 
     foreach($a as $b) 
     { 
      cc($b, $n); 
     } 
    }else 
    { 
     echo $n.'|'; 
    } 
} 
countdim($a); 

Ici j'ai fait une fonction avec retour, mais .. alors son retour de html « GET » retour à php sur le bouton clic .. Je ne sais pas tout autre moyen de le faire fonctionner .. si juste le nom de votre choix à un $ et appuyez sur le bouton:/

$max_depth_var = isset($_REQUEST['max_depth_var']) ? $_REQUEST['max_depth_var'] : 0; 
?> 
<form id="form01" method="GET"> 
<input type="hidden" name="max_depth_var" value="<?php 
function cc($b, $n) 
{ 
    $n++.' '; 
    bb($b, $n); 
} 
function bb($a, $n = 0) 
{ 
    if(is_array($a)) 
    { 
     foreach($a as $b)cc($b, $n); 
    }else 
    { 
    echo $n.', '; 
    }; 
} 
bb($a); ?>"> 
<input type="submit" form="form01" value="Get max depth value"> 
</form><?php 
$max_depth_var = max(explode(', ', rtrim($max_depth_var, ","))); 
echo "Array's maximum dimention is $max_depth_var."; 
+0

Ne pas seulement poster du code; fournir une explication. – reformed

Questions connexes