2010-01-23 15 views
18

¿Hay una manera de determinar cuántas dimensiones existen en una matriz PHP?Determinar el número de dimensiones en una matriz PHP

+0

duplicado posible de [¿hay una manera de averiguar cómo una matriz PHP "profundo" es?] (http://stackoverflow.com/questions/ 262891/es-no-a-way-to-find out how-profundo-a-php-array-es) – jeremy

Respuesta

16

Niza problema, aquí es 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

Esto no es del todo correcto. Porque solo prueba el primer elemento de las matrices. Así que esto sólo se da el resultado esperado cuando se está seguro de que es un distribuye uniformemente la matriz de matrices. Tendrás que recorrer todos los elementos para conocer realmente las profundidades variables. (O tal vez algún algoritmo de recorrido spiffy No soy consciente de) –

4

puede probar esta:

$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

uno de los buenos, gracias –

1

Como la mayoría de los lenguajes de procedimientos y orientado a objetos, PHP no implementa de forma nativa matrices multidimensionales - se usa matrices anidadas.

La función recursiva sugerido por otros son sucios, pero lo más parecido a una respuesta.

C.

1

Esta funciona para matrices donde cada dimensión no tiene el mismo tipo de elementos. Puede necesitar atravesar todos los elementos.

 
$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

se corrigió en Some issues with jumping from one function to another in a loop in php


Esta doble función se destinará a la última dimensión de cada matriz en $ a y cuando no es una matriz más que resonará el número de bucles que le hizo a llegar allí con un delimitador |. La desventaja de este código es sólo ecos y no puede ser devuelto (en modo normal).

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); 

Aquí hice una función con retorno, pero .. es un regreso de html a continuación, "" volver a php en el clic de botón .. No sé de ninguna otra manera de hacer que funcione .. por lo que sólo el nombre de su matriz para un $ y pulsa el botón:/

$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

No se limite a publicar código; proporciona una explicación – reformed

Cuestiones relacionadas