很难弄清楚如何解释它,所以代码可能会有所帮助。
$out = array();
source_addValue($out['sources']['site1']['user_id'], '12345');
source_addValue($out['sources']['site1']['username'], 'testuser');
source_addValue($out['sources']['site1']['address']['state'], 'CA');
function source_addValue($field, $value) {
global $out;
if (!$field) $field = $value;
}
那,或者因为$out['sources']
部分保持不变,可能是这样的:
$out = array();
source_addValue('site1', 'user_id', '12345');
source_addValue('site1', 'username', 'testuser');
source_addValue('site1', array('address','state'), 'CA');
function source_addValue($site, $field, $value) {
global $out;
if (!$out['sources'][$site]$field) $out['sources'][$site]$field = $value;
}
无论哪种方式,我都会挂断该函数,特别是if
语句。我只需要能够检查是否已为$out
设置了该数组值(能够检查子数组),如果不是,请将其添加到$out
数组中
答案 0 :(得分:1)
我不相信我明白你的意思,但我猜:
function autoVivifyDynamicKeyPath($pathKeys, $val) {
global $out;
$cursor =& $out;
foreach ($pathKeys as $key) {
if (!isset($cursor[$key]) || !is_array($cursor[$key])) {
$cursor[$key] = array();
}
$cursor =& $cursor[$key];
}
$cursor = $val;
}
autoVivifyDynamicKeyPath(array('site1', 'address', 'state'), 'ca');
答案 1 :(得分:0)
Rambo的功能不会检查当前键是否已设置。它会覆盖已有值的所有键。这是一个修改版本,用于检查已存在的密钥
$out = array();
source_addValue(array('sources', 'site1', 'user_id'), '12345');
source_addValue(array('sources', 'site1', 'username'), 'testuser');
source_addValue(array('sources', 'site1', 'address', 'state'), 'CA');
function source_addValue($pathKeys, $val) {
global $out;
foreach ($pathKeys as $key) {
if (!isset($out[$key]) && !is_array($out[$key])) {
$out[$key] = array();
}
$out =& $out[$key];
}
if(empty($out)){
$out = $val;
}
}
print_r($out);