方法如何更改数组,并将更改映射到原始数组

时间:2011-12-22 17:56:43

标签: php arrays

我正在使用$ 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

1 个答案:

答案 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');