2010-01-23 17 views
18

PHP dizisinde kaç boyut olduğunu belirlemek için bir yol var mı?PHP Dizisindeki Boyutların sayısını Belirle

+0

Olası yinelenen [ "derin" bir PHP dizidir öğrenmek için bir yolu var mı?] (http://stackoverflow.com/questions/: düğmesine $ a olarak dizinizi isim ve vurmak 262891/var-bir-bulmak-out-derin-bir-php-dizi-is-yoludur) – jeremy

cevap

16

Güzel sorun, burada a solution I stole from the PHP Manual geçerli:

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

    else 
    { 
     $return = 1; 
    } 

    return $return; 
} 
+13

Bu tamamen doğru değil. Çünkü sadece dizilerin ilk elemanını test eder. Yani bu, sadece dizileri eşit olarak dağıttığından emin olduğunuzda beklenen sonucu verir. Değişken derinlikleri gerçekten bilmek için tüm öğeler arasında geçiş yapmanız gerekir. (Ya da belki de farkında değilim bazı çapraz traversal algoritma) –

4

bu deneyebilirsiniz: En prosedürel ve nesne yönelimli diller gibi

$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

Güzel bir, teşekkürler –

1

PHP doğal çok boyutlu diziler uygulamak ETMEZ - bu iç içe diziler kullanır.

Diğerleri tarafından önerilen özyinelemeli işlev dağınıktır, ancak en yakın yanıttır.

C

1

Bu da her bir boyut elemanlarının aynı türden değildir diziler için çalışır. Tüm öğeleri geçmek gerekebilir.

 
$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

onun değil bir dizi artık o yaptığını döngü sayısını yankılanacak Bu çifte işlev $ a her dizinin son boyuta gidip edecek Some issues with jumping from one function to another in a loop in php


düzeltildi bir sınırlayıcı ile oraya | Bu kodun dezavantajı sadece yankılanıyor ve iade edilemiyor (normal şekilde).

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); 
İşte

i getiri olan bir işlev yaptı, ama .. html onun bir dönüş sonra .. Ben o iş yapmak için başka yolum bilmiyorum düğmesi tıklandığında php için geri "GET" .. yüzden sadece Evi/

$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

Sadece kod yazmayın; bir açıklama sağlayın. – reformed

İlgili konular