2011-12-22 70 views
0

我正在处理$ 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())代码像这样的地方。我该如何做到这一点,以便原始数组始终得到更新,并且嵌套的级别会发生变化?

似乎将数组传递为& $ arr在php 5.3中是不允许的。我得到这个错误。 Call-time pass-by-reference has been deprecated

+0

为什么没有功能? $ arr [$ ia] [$ ib] = my_function(); ? – jValdron 2011-12-22 17:59:21

+0

@jValdron但函数将返回什么?我的意思是确保原始数组得到更新的最佳方式是什么? – sameold 2011-12-22 18:01:36

+0

你的函数可能会返回初始化:'array('name'=> array()''components'=> array());',我可能只是不明白这个问题:) – jValdron 2011-12-22 18:30:21

回答

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'); 
+0

+1但我'通过引用调用时传递已被弃用。我正在使用PHP 5.3。看起来他们做出了改变,所以这是不允许的。 – sameold 2011-12-22 18:19:54