2010-01-23 9 views
18

C'è un modo per determinare quante dimensioni ci sono in un array PHP?Determina il numero di dimensioni in un array PHP

+0

Eventuali duplicati di [c'è un modo per scoprire come "profondo" un array PHP è?] (http://stackoverflow.com/questions/ 262891/is-there-a-way-to-find-out-how-deep-a-php-array-is) – jeremy

risposta

16

Nizza problema, qui è 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

Questo non è completamente corretto. Perché verifica solo il primo elemento degli array. Quindi questo dà il risultato atteso solo quando sei sicuro che distribuisca in modo uniforme array di array. Dovrai scorrere tutti gli elementi per conoscere veramente le profondità variabili. (O forse un algoritmo spiffy traversal di cui non sono a conoscenza) –

4

si può provare questo:

$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

Bello, grazie –

1

Come la maggior parte linguaggi procedurali e object-oriented, PHP non implementa nativamente array multidimensionali - è usa matrici annidate.

La funzione ricorsiva suggerita da altri è confusa, ma la cosa più vicina a una risposta.

C.

1

Questo funziona per array in cui ogni dimensione non hanno lo stesso tipo di elementi. Potrebbe essere necessario attraversare tutti gli elementi.

 
$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

è stato corretto in Some issues with jumping from one function to another in a loop in php


Questa doppia funzione andrà a l'ultima dimensione di ciascun array in $ a, e quando il suo non è un allineamento più sarà eco il numero di cicli che ha fatto a arrivare con un delimitatore |. Lo svantaggio di questo codice è solo echo e non può essere restituito (in modo normale).

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

Qui ho fatto una funzione con ritorno, ma .. il suo ritorno da un html poi "GET" torna a PHP sul tasto di scatto .. non so altro modo per farlo funzionare .. quindi basta chiamare il vostro array per $ a e premere il pulsante:/

$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

Non inserire solo il codice; fornire una spiegazione. – reformed

Problemi correlati