1
我有以下的PHP函數問題PHP參考
protected function &__group($ar_path, $b_create) {
assert('is_null($ar_path) || is_array($ar_path)');
$parent = &$this->ma_config;
if (!is_null($ar_path) && (count($ar_path) > 0)) {
if ($b_create) {
// Get with Create is necessary
foreach ($ar_path as $group) {
if (!array_key_exists('groups', $parent)) {
/*MARKER*/ $parent['groups'] = array($group => array());
// Mark the File as Modified
$this->mb_dirty = true;
continue;
}
$parent = &$parent['groups'];
if (!array_key_exists($group, $parent)) {
$parent[$group] = array();
// Mark the File as Modified
$this->mb_dirty = true;
continue;
}
$parent = &$parent[$group];
}
} else {
// Simple Get
foreach ($ar_path as $group) {
$parent = array_extract_key(
array('groups', $group),
$parent,
'is_array'
);
if (is_null($parent)) {
break;
}
}
}
}
return $parent;
}
功能應該允許我在任何層次(即嵌套組)創建「組」。
什麼似乎是問題是PHP處理引用的方式。 當我發送類似ar_path('level 1','level 2')
的東西時,函數應該創建一個「1級」的子組(如果它不存在)。
因此給出的是這樣的:
$this->ma_config = array(
'groups' => array(
'level 1' => array(
'values' => array(
'1',
'2'
)
)
)
);
我喜歡的東西最終會:
$this->ma_config = array(
'groups' => array(
'level 1' => array(
'groups' => array(
'level 2' => array()
),
'values' => array(
'1',
'2'
)
)
)
);
的問題是,在我的第二次通過循環,當我運行線/*MARKER*/
到創建第二級(即應該導致在$this->ma_config['groups']['level 1]['groups']['level 2'] = array()
)它摧毀'1級',而不是(從調試器,似乎PHP最終這樣做,而不是$this->ma_config['groups']['level 1] = array()
)
爲什麼?
我測試了你的代碼,它的工作原理就像它應該...你可以將你的調用發佈到'__group'來查看你傳遞的參數嗎? – netcoder 2010-11-12 14:53:25