因此,我编写了一个类,它可以解析 XML 文档并从中创建 SQL 查询,以根据设置更新或插入新行。
由于脚本必须处理任意数量的嵌套块,因此我放入所有值的数组的路径是动态创建的,与以下示例非常相似:
$path = array('field1','field2');
$path = "['".implode("']['",$path)."']";
eval("\$array".$path."['value'] = 'test';");
基本上$path
包含一个数组,显示我们当前在数组中的深度,如果$path
例如包含值main_table
and field
我要套装$array['main_table']['field']['value']
to 'test'
正如您所看到的,我目前正在使用 eval 来执行此操作,并且效果很好。我只是想知道是否有一种方法可以在不使用 eval 的情况下做到这一点。
就像是$array{$path}['value'] = 'test';
但然后是一些真正有效的东西。
有什么建议么?
EDIT
我寻找替代方案的原因是我认为 eval 是不好的做法。
第二次编辑
将实际代码更改为虚拟代码,因为它引起了很多误解。
使用这样的东西:
/**
* Sets an element of a multidimensional array from an array containing
* the keys for each dimension.
*
* @param array &$array The array to manipulate
* @param array $path An array containing keys for each dimension
* @param mixed $value The value that is assigned to the element
*/
function set_recursive(&$array, $path, $value)
{
$key = array_shift($path);
if (empty($path)) {
$array[$key] = $value;
} else {
if (!isset($array[$key]) || !is_array($array[$key])) {
$array[$key] = array();
}
set_recursive($array[$key], $path, $value);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)