我正在使用$ arr并经常需要在使用之前检查索引是否已“初始化”。
这些索引的嵌套级别不同
$arr[$ia]
$arr[$ia][$ib][$ic]
但是当我初始化它们时,它总是以相同的方式
$arr[$ia] = array('name'=>array(), 'components'=>array());
$arr[$ia][$ib][$ic] = array('name'=>array(), 'components'=>array());
我的确如此
//if $arr[$ia] is not set, set it, then use it
if(!isset($arr[$ia])){
$arr[$ia] = array('name'=>array(), 'components'=>array());
}
$arr[$ia]['name'] = 'some value';
or
//if $arr[$ia][$ib] is not set, set it, then use it
if(!isset($arr[$ia][$ib])){
$arr[$ia][$ib] = array('name'=>array(), 'components'=>array());
}
$arr[$ia][$ib]['name'] = 'some other value';
我想将初始化步骤移到一个方法中,所以我没有这样的array('name'=>array(), 'components'=>array())
代码。我如何做到这一点,以便原始数组总是得到更新,并且假设嵌套级别发生变化?
似乎在php 5.3中不允许将数组作为& $ arr传递。我收到这个错误。 Call-time pass-by-reference has been deprecated
。
答案 0 :(得分:1)
function initArray(&$ar,$i) {
if (!isset($ar[$i])) $ar[$i]=array('name'=>array(), 'components'=>array());
}
和
initArray(&$arr,$ia);
$arr[$ia]['name'] = 'some value';
RESP。
ínitArray(&$arr[$ia],$ib);
$arr[$ia][$ib]['name'] = 'some other value';
如果您始终指定名称,则可以将其设置为
function initArrayName(&$ar, $i, $name) {
initArray(&$ar,$i);
$arr[$i]['name']=$name;
}
和
initArrayName(&$arr,$ia,'some value');
RESP。
ínitArrayName(&$arr[$ia],$ib,'some other value');