比如:
$world = array(
'中国'=>array(
'黑龙江省'=>array(
'佳木斯市'=>array(
'桦南县'=>array(
'闫家镇','八浪乡','二道沟','梨树'
)
)
)
)
);
这是四维的
$world = array(
'中国'=>array(
'黑龙江省'=>array()
)
)
);这个是三维的
有什么函数能够返回数组的维度吗?

解决方案 »

  1.   

    <?php
    $world = array(
    '中国'=>array(
    '黑龙江省'=>array(
    '佳木斯市'=>array(
    '桦南县'=>array(
    '闫家镇','八浪乡','二道沟','梨树'
    )
    )
    )
    )
    );echo '<pre>';
    print_r($world);
    ?>数一下最高那个出现多少次 array 就可以
    结果是5维
      

  2.   

    我要的是函数,是处理数组维度的函数。
    array();
    1维度
    array(array());
    2维度
    ...
    array(array(array(array())));
    4维度
      

  3.   


    <?php
    // return depth of given array
    // if Array is a string ArrayDepth() will return 0
    // usage: int ArrayDepth(array Array)function ArrayDepth($Array,$DepthCount=-1,$DepthArray=array()) {
      $DepthCount++;
      if (is_array($Array))
        foreach ($Array as $Key => $Value)
          $DepthArray[]=ArrayDepth($Value,$DepthCount);
      else
        return $DepthCount;
      foreach($DepthArray as $Value)
        $Depth=$Value>$Depth?$Value:$Depth;
      return $Depth;
    }//example
    $world = array( 
    '中国'=>array( 
    '黑龙江省'=>array( 
    '佳木斯市'=>array( 
    '桦南县'=>array( 
    '闫家镇','八浪乡','二道沟','梨树' 




    ); $depth=ArrayDepth($world);
    echo $depth;                //请网友注意这是个5维数组,并不是4维。
    ?> 
      

  4.   

    能想到的也就是遍历+递归了
    $world = array(
    '中国'=>array(
    '黑龙江省'=>array(
    '佳木斯市'=>array(
    '桦南县'=>array(
    '闫家镇','八浪乡','二道沟','梨树'
     )
    )
    )
     )
    );
    function array_deep($array)
    {
    $maxdeep = 1;
    foreach($array as $v)
    {
    if(is_array($v)){
    $deep = array_deep($v) + 1;
    $deep > $maxdeep && $maxdeep = $deep;
    }
    }
    return $maxdeep;
    }
    echo array_deep($world);
      

  5.   

    或者还可以$str = print_r($world,true);
    然后解析Array( 和 )的匹配深度,是个push和pop的过程,应该不难实现。
      

  6.   

    楼上 这个方法不错,不过不知道php 有没有这样的函数呢?
      

  7.   

    <?php
    function ArrayDepth($Array,$DepthCount=-1,$DepthArray=array()) {
      $DepthCount++;
      if (is_array($Array))
        foreach ($Array as $Key => $Value)
          $DepthArray[]=ArrayDepth($Value,$DepthCount);
      else
        return $DepthCount;
      foreach($DepthArray as $Value)
        $Depth=$Value>$Depth?$Value:$Depth;
      return $Depth;
    }
    ?>有没有搞错啊,不是写给你了吗?还让我帮你解决什么问题?晕~~~
      

  8.   

    function array_deep(&$arr)
    {
        $deep = 1;
        print_r($arr);
        foreach ($arr as $k=>$v) {
            if (is_array($v)) 
                $d = array_deep($v)+1;
            else 
                $d = 1;
            if ($d>$deep)
                $deep = $d; 
        }   
        return $deep;
    }
      

  9.   

    function array_deep(&$arr)
    {
        $deep = 1;
        foreach ($arr as $k=>$v) {
            if (is_array($v)) 
                $d = array_deep($v)+1;
            else 
                $d = 1;
            if ($d>$deep)
                $deep = $d; 
        }   
        return $deep;
    }
      

  10.   


    function array_deep($str)
    {
       static $deep = 0;
       if(is_array($str))
       {
    $deep++;
    foreach($str as $k=>$v)
    {      
    array_deep($v);
    }
       }
       return $deep;  
    }
    我总结了下感觉这样更好些,谢谢 2分钟后结贴(可惜还是递归)