Question: Right now i got an array which has some sort of information and i need to create a table from it. e.g.

```
Student{
      [Address]{
              [StreetAddress] =>"Some Street"
              [StreetName] => "Some Name"
      }
      [Marks1] => 100
      [Marks2] => 50
    }

```

Now I want to create database table like which contain the fields name as :

```
Student_Address_StreetAddress
Student_Address_StreetName
Student_Marks1
Student_Marks2

```

It should be recursive so from any depth of array it can create the string in my format.

Answer: 
You can use the [RecursiveArrayIterator](http://php.net/recursivearrayiterator) and the [RecursiveIteratorIterator](http://php.net/recursiveiteratoriterator) (to iterate over the array recursively) from the Standard PHP Library ([SPL](http://php.net/spl)) to make this job relatively painless.

```
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($arr));
$keys = array();
foreach ($iterator as $key => $value) {
    // Build long key name based on parent keys
    for ($i = $iterator->getDepth() - 1; $i >= 0; $i--) {
        $key = $iterator->getSubIterator($i)->key() . '_' . $key;
    }
    $keys[] = $key;
}
var_export($keys);

```

The above example outputs something like:

```
array (
  0 => 'Student_Address_StreetAddress',
  1 => 'Student_Address_StreetName',
  2 => 'Student_Marks1',
  3 => 'Student_Marks2',
)

```
Something like this maybe?

```
$schema = array(
    'Student' => array(
        'Address' => array(
            'StreetAddresss' => "Some Street",
            'StreetName' => "Some Name",
        ),
        'Marks1' => 100,
        'Marks2' => 50,
    ),
);

$result = array();

function walk($value, $key, $memo = "") {
    global $result;
    if(is_array($value)) {
        $memo .= $key . '_';
        array_walk($value, 'walk', $memo);
    } else {
        $result[] = $memo . $key;
    }
}

array_walk($schema, 'walk');

var_dump($result);

```

I know globals are bad, but can't think of anything better now.