2010-01-23 13 views
18

Czy istnieje sposób określenia liczby wymiarów w tablicy PHP?Określanie liczby wymiarów w tablicy PHP

+0

Możliwy duplikat [Czy istnieje sposób aby dowiedzieć się, jak „głęboko” tablicą PHP jest?] (http://stackoverflow.com/questions/ 262891/is-there-a-way-to-find-out-how-deep-a-php-array-is) – jeremy

Odpowiedz

16

Nicea problemem tutaj jest 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

To nie jest całkowicie poprawne. Ponieważ testuje tylko pierwszy element tablic. To daje tylko oczekiwany rezultat, gdy masz pewność, że jest to równomiernie rozkłada tablicę tablic. Będziesz musiał przechodzić przez wszystkie elementy, aby naprawdę poznać różne głębokości. (A może jakiś nieznany algorytm trajektorii, którego nie znam). –

4

można spróbować to:

$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

Przyjemnie, dziękuję –

1

Podobnie jak większość języków proceduralnych i obiektowego, PHP NIE natywnie wdrożyć wielowymiarowe tablice - to używa zagnieżdżonych tablic.

Funkcja rekursywna sugerowana przez innych jest niechlujna, ale najbliższa odpowiedzi.

C.

1

Ten działa na tablicach, gdzie każdy wymiar nie mają tego samego rodzaju elementów. Może być konieczne przechodzenie przez wszystkie elementy.

 
$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

został rozwiązany w Some issues with jumping from one function to another in a loop in php


Ta podwójna funkcja przejdzie do ostatniego wymiaru każdej tablicy w $ a gdy jej nie tablicą już będzie to echo liczbę pętli to zrobił dojdź tam z ogranicznikiem |. Wadą tego kodu jest tylko echo i nie można go zwrócić (w normalny sposób).

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

Tutaj zrobiłem funkcję z powrotem, ale .. jej powrót z html następnie „GET” z powrotem do php na kliknięcia przycisku .. nie wiem w inny sposób, aby to działało tak po prostu .. wymienić swoją tablicę $ a i naciśnij przycisk:/

$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

Nie po prostu publikuj kod; podać wyjaśnienie. – reformed

Powiązane problemy