<?php
function set_config
($key, $value, $config = array()){ // The base case of the recursion is that no keys are left to recurse through
// so we return the value
if($key == ''){
return $value;
} else {
// break the key into an array and set the current one to the first item
// check if the key already exists in the array and if so just update it's contents
// by merging existing items with the new one
if(isset($config[$current_key])) $config[$current_key] = array_merge($config[$current_key], set_config
(join('/',$keys), $value, $config[$current_key]));
// no keys means we are at the base of the recursion, return just the value
else
return array($current_key => set_config
(join('/',$keys), $value)); }
return $config;
// done
}
$config = set_config('db/yum/user','val', $config);
$config = set_config('db/yum/server','val2', $config);
$config = set_config('db/yum/a/few/more/levels/for/fun','LOLOLOLOL', $config);
?>
PD9waHAKZnVuY3Rpb24gc2V0X2NvbmZpZygka2V5LCAkdmFsdWUsICRjb25maWcgPSBhcnJheSgpKXsKICAvLyBUaGUgYmFzZSBjYXNlIG9mIHRoZSByZWN1cnNpb24gaXMgdGhhdCBubyBrZXlzIGFyZSBsZWZ0IHRvIHJlY3Vyc2UgdGhyb3VnaAogIC8vIHNvIHdlIHJldHVybiB0aGUgdmFsdWUKICBpZigka2V5ID09ICcnKXsKICAgIHJldHVybiAkdmFsdWU7CiAgfSBlbHNlIHsKICAgIC8vIGJyZWFrIHRoZSBrZXkgaW50byBhbiBhcnJheSBhbmQgc2V0IHRoZSBjdXJyZW50IG9uZSB0byB0aGUgZmlyc3QgaXRlbQogICAgJGtleXMgICAgICAgID0gZXhwbG9kZSgnLycsICRrZXkpOwogICAgJGN1cnJlbnRfa2V5ID0gYXJyYXlfc2hpZnQoJGtleXMpOwoKICAgIC8vIGNoZWNrIGlmIHRoZSBrZXkgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGFycmF5IGFuZCBpZiBzbyBqdXN0IHVwZGF0ZSBpdCdzIGNvbnRlbnRzCiAgICAvLyBieSBtZXJnaW5nIGV4aXN0aW5nIGl0ZW1zIHdpdGggdGhlIG5ldyBvbmUKICAgIGlmKGlzc2V0KCRjb25maWdbJGN1cnJlbnRfa2V5XSkpCiAgICAgICRjb25maWdbJGN1cnJlbnRfa2V5XSA9IGFycmF5X21lcmdlKCRjb25maWdbJGN1cnJlbnRfa2V5XSwgc2V0X2NvbmZpZyhqb2luKCcvJywka2V5cyksICR2YWx1ZSwgJGNvbmZpZ1skY3VycmVudF9rZXldKSk7CiAgICAKICAgIC8vIG5vIGtleXMgbWVhbnMgd2UgYXJlIGF0IHRoZSBiYXNlIG9mIHRoZSByZWN1cnNpb24sIHJldHVybiBqdXN0IHRoZSB2YWx1ZQogICAgZWxzZQogICAgICByZXR1cm4gYXJyYXkoJGN1cnJlbnRfa2V5ID0+IHNldF9jb25maWcoam9pbignLycsJGtleXMpLCAkdmFsdWUpKTsKICB9IAoKICByZXR1cm4gJGNvbmZpZzsKICAvLyBkb25lCn0KCiRjb25maWcgPSBhcnJheSgpOwokY29uZmlnID0gc2V0X2NvbmZpZygnZGIveXVtL3VzZXInLCd2YWwnLCAkY29uZmlnKTsKcHJpbnRfcigkY29uZmlnKTsKJGNvbmZpZyA9IHNldF9jb25maWcoJ2RiL3l1bS9zZXJ2ZXInLCd2YWwyJywgJGNvbmZpZyk7CnByaW50X3IoJGNvbmZpZyk7CiRjb25maWcgPSBzZXRfY29uZmlnKCdkYi95dW0vYS9mZXcvbW9yZS9sZXZlbHMvZm9yL2Z1bicsJ0xPTE9MT0xPTCcsICRjb25maWcpOwpwcmludF9yKCRjb25maWcpOwoKPz4=