Is there a way to loop through a multidimensional array without knowing it's depth?

后端 未结 5 1762
滥情空心
滥情空心 2020-12-01 16:39

So far, if I have to loop through a multidimensional array, I use a foreach loop for each dimension.

e.g for two dimensions

foreach($array as $key=&g         


        
5条回答
  •  不知归路
    2020-12-01 17:18

    Yes, you can use recursion. Here's an example where you output all the elements in an array:

    function printAll($a) {
      if (!is_array($a)) {
        echo $a, ' ';
        return;
      }
    
      foreach($a as $v) {
        printAll($v);
      }
    }
    
    $array = array('hello',
                   array('world',
                         '!',
                         array('whats'),
                         'up'),
                   array('?'));
    printAll($array);
    

    What you should always remember when doing recursion is that you need a base case where you won't go any deeper.

    I like to check for the base case before continuing the function. That's a common idiom, but is not strictly necessary. You can just as well check in the foreach loop if you should output or do a recursive call, but I often find the code to be harder to maintain that way.

    The "distance" between your current input and the base case is called a variant and is an integer. The variant should be strictly decreasing in every recursive call. The variant in the previous example is the depth of $a. If you don't think about the variant you risk ending up with infinite recursions and eventually the script will die due to a stack overflow. It's not uncommon to document exactly what the variant is in a comment before recursive functions.

提交回复
热议问题