title: Resolve a multi dimensional array into fully specified endpoints
body: <p>I need to turn each end-point in a multi-dimensional array (of any dimension) into a row containing the all the descendant nodes using PHP. In other words, I want to resolve each complete branch in the array. I am not sure how to state this more clearly, so maybe the best way is to give an example.</p>
  <p>If I start with an array like:</p>
  <pre><code>$arr = array(
   'A'=&gt;array(
      'a'=&gt;array(
          'i'=&gt;1, 
          'j'=&gt;2),
      'b'=&gt;3
   ),
   'B'=&gt;array(
      'a'=&gt;array(
          'm'=&gt;4, 
          'n'=&gt;5),
      'b'=&gt;6
   )
  );
  </code></pre>
  <p>There are 6 end points, namely the numbers 1 to 6, in the array and I would like to generate the 6 rows as:</p>
  <ol>
  <li>A,a,i,1</li>
  <li>A,a,j,2</li>
  <li>A,b,2</li>
  <li>B,a,m,3</li>
  <li>B,a,n,4</li>
  <li>B,b,2</li>
  </ol>
  <p>Each row contains full path of descendants to the end-point. As the array can have any number of dimensions, this suggested a recursive PHP function and I tried:</p>
  <pre><code>function array2Rows($arr, $str='', $out='') {
    if (is_array($arr)) {
      foreach ($arr as $att =&gt; $arr1) {
          $str .= ((strlen($str)? ',': '')) . $att;
          $out = array2Rows($arr1, $str, $out);
      }
      echo '&lt;hr /&gt;';
    } else {
      $str .= ((strlen($str)? ',': '')) . $arr;
      $out .= ((strlen($out)? '&lt;br /&gt;': '')) . $str;
    }
    return $out;
  }
  </code></pre>
  <p>The function was called as follows:</p>
  <pre><code>echo '&lt;p&gt;'.array2Rows($arr, '', '').'&lt;/p&gt;';
  </code></pre>
  <p>The output from this function is:</p>
  <ol>
  <li>A,a,i,1</li>
  <li>A,a,i,j,2</li>
  <li>A,a,b,3</li>
  <li>A,B,a,m,4</li>
  <li>A,B,a,m,n,5</li>
  <li>A,B,a,b,6</li>
  </ol>
  <p>Which apart from the first value is incorrect because values on some of the nodes are repeated. I have tried a number of variations of the recursive function and this is the closest I can get.</p>
  <p>I will welcome any suggestions for how I can get a solution to this problem and apologize if the statement of the problem is not very clear.</p>