Create infinitely deep multidimensional array from string in PHP

arrays, php

Solution

This is probably what you are looking for:

#!/usr/bin/php
<?php

$config = array();

function set_config($key, $value) {
  global $config;

  if (FALSE=== ($levels=explode('/',$key)))
    return;

  $pointer = &$config;
  for ($i=0; $i<sizeof($levels); $i++) {
    if (!isset($pointer[$levels[$i]]))
      $pointer[$levels[$i]]=array();
    $pointer=&$pointer[$levels[$i]];
  } // for

  $pointer=$value;
} // set_config

set_config('db/yum/user','val');
set_config('db/yum/server','val2');

print_r($config);

?>

The output is:

Array
(
    [db] => Array
        (
            [yum] => Array
                (
                    [user] => val
                    [server] => val2
                )

        )

)

Problem

Possible Duplicate: String with array structure to Array I have a string "db/yum/user", and I'm trying to explode it so each element of / becomes a deeper dimension. So the direct method of creating the data variable would be ``` $config['db']['yum']['user'] = "val"; ``` My attempt so far: ``` $config = array(); function set_config($key,$value){ global $config; //Multi deminsional config $multi_configs = explode('/',$key); if($multi_configs!==false){ $build_up = array(); $c =& $build_up; foreach($multi_configs as $multi_config){ $c[$multi_config] = array(); $c =& $c[$multi_config]; } //$c = $value; array_merge($config,$c); return; } $config[$key] = $value; } set_config('db/yum/user','val'); set_config('db/yum/server','val2'); //etc,etc,etc, this was modified to make more sense in this context. ```

Original source

Related problems