这篇不是讨论split,explode的用法,而是探讨一种特殊情况。
举例说明.
$array
=
array
(
2
,
'
a
'
=>
array
(
'
b
'
=>
'
c
'
));
// 深度keys列表
$keys = array ( ' a ' , ' b ' );
// 值
$vals = ' x ' ;
// 问题是,如何根据$keys数组(动态),改动相应数组$array的值
//比如上述情况要求将$array['a']['b'] 的值由'c'改成'x'
//注意$keys是动态的,也有可能是array('a','c','x','d'),这种情况就
//要求将$array['a']['c']['x']['d']设置为'x';
// 深度keys列表
$keys = array ( ' a ' , ' b ' );
// 值
$vals = ' x ' ;
// 问题是,如何根据$keys数组(动态),改动相应数组$array的值
//比如上述情况要求将$array['a']['b'] 的值由'c'改成'x'
//注意$keys是动态的,也有可能是array('a','c','x','d'),这种情况就
//要求将$array['a']['c']['x']['d']设置为'x';
乍一看,似乎很简单,eval不就可以搞定了么,确实,但是eval在很多服务器都是严禁使用的,
除去eval,不是还有preg_replace + e修正符么,的确也可以,但是总是有一些安全上的担忧,
万一给注入system/exec/shel_exec函数+系统命令岂不是和eval一样危险?
最终想到了parse_str,这个相对就安全不少。
$array
=
array
(
2
,
'
a
'
=>
array
(
'
b
'
=>
'
c
'
));
// 深度keys列表
$keys = array ( ' a ' , ' b ' );
// 值
$vals = ' x ' ;
// 字符串转数组
parse_str ( ' array[ ' . implode ( ' ][ ' , $keys ) . ' ]= ' . $vals );
print_r ( $array );
// 深度keys列表
$keys = array ( ' a ' , ' b ' );
// 值
$vals = ' x ' ;
// 字符串转数组
parse_str ( ' array[ ' . implode ( ' ][ ' , $keys ) . ' ]= ' . $vals );
print_r ( $array );