Str*_*rae 13 php arrays eval multidimensional-array
查看Kohana文档,我发现这非常有用,它们用于使用点表示法从多维数组中获取值,例如:
$foo = array('bar' => array('color' => 'green', 'size' => 'M'));
$value = path($foo, 'bar.color', NULL , '.');
// $value now is 'green'
Run Code Online (Sandbox Code Playgroud)
我想知道是否有办法以相同的方式设置数组值:
set_value($foo, 'bar.color', 'black');
Run Code Online (Sandbox Code Playgroud)
我发现这样做的唯一方法是重新构建数组表示法($ array ['bar'] ['color'])然后设置值..使用eval.
有什么想法避免评估?
hai*_*sin 38
function set_val(array &$arr, $path,$val)
{
$loc = &$arr;
foreach(explode('.', $path) as $step)
{
$loc = &$loc[$step];
}
return $loc = $val;
}
Run Code Online (Sandbox Code Playgroud)
当然有可能.
function set_value(&$root, $compositeKey, $value) {
$keys = explode('.', $compositeKey);
while(count($keys) > 1) {
$key = array_shift($keys);
if(!isset($root[$key])) {
$root[$key] = array();
}
$root = &$root[$key];
}
$key = reset($keys);
$root[$key] = $value;
}
Run Code Online (Sandbox Code Playgroud)
$foo = array();
set_value($foo, 'bar.color', 'black');
print_r($foo);
Run Code Online (Sandbox Code Playgroud)
输出
Array
(
[bar] => Array
(
[color] => black
)
)
Run Code Online (Sandbox Code Playgroud)
请访问https://gist.github.com/elfet/4713488
$dn = new DotNotation(['bar'=>['baz'=>['foo'=>true]]]);
$value = $dn->get('bar.baz.foo'); // $value == true
$dn->set('bar.baz.foo', false); // ['foo'=>false]
$dn->add('bar.baz', ['boo'=>true]); // ['foo'=>false,'boo'=>true]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14383 次 |
| 最近记录: |