PHP: 使用变量作为键设置嵌套数组的值
PHP: Set value of nested array using variable as key
假设我有这种代码:
$array = [
'a'=> [
'b' => [
'c'=>'some value',
],
],
];
$array['a']['b']['c'] = 'new value';
当然这是有效的,但我想要的是使用变量更新此 'c' 键,类似这样的东西:
$keys = '[a][b][c]';
$array{$keys} = 'new value';
但是键被视为字符串,这就是我得到的:
$array['[a][b][c]'] = 'new value';
所以我需要一些帮助,向我展示在不使用 eval() 的情况下完成这项工作的正确方法。
顺便说一句,可以有任意数量的数组嵌套,所以这样的答案不是一个好的答案:
$key1 = 'a';
$key2 = 'b';
$key3 = 'c';
$array[$key1][$key2][$key3] = 'new value';
嗨,兄弟,你可以通过一组键来做到这一点:
这是你的数组结构:
$array = array(
'a'=> array(
'b' => array(
'c'=>'some value',
),
),
);
这是 PHP 使用动态键从数组中获取值的代码:
$result = $array; //Init an result array by the content of $array
$keys = array('a','b','c'); //Make an array of keys
//For loop to get result by keys
for($i=0;$i<count($keys);$i++){
$result = $result[$keys[$i]];
}
echo $result; // $result = 'new value'
希望回答对您有所帮助,在这里找到您的工作代码PHPFiddle。
这不是定义密钥的最佳方式,但是:
$array = [];
$keys = '[a][b][c]';
$value = 'HELLO WORLD';
$keys = explode('][', trim($keys, '[]'));
$reference = &$array;
foreach ($keys as $key) {
if (!array_key_exists($key, $reference)) {
$reference[$key] = [];
}
$reference = &$reference[$key];
}
$reference = $value;
unset($reference);
var_dump($array);
如果你必须像这样在一个字符串中定义一个键序列,那么使用一个可以展开的简单分隔符比需要 trim 构建一个单独的数组更简单键,所以像 a.b.c
这样简单的东西比 [a][b][c]
更容易使用
最简单的方法是使用 set method from this library:
Arr::set($array, 'a.b.c', 'new_value');
或者,如果你有键作为数组,你可以使用这种形式:
Arr::set($array, ['a', 'b', 'c'], 'new_value');
假设我有这种代码:
$array = [
'a'=> [
'b' => [
'c'=>'some value',
],
],
];
$array['a']['b']['c'] = 'new value';
当然这是有效的,但我想要的是使用变量更新此 'c' 键,类似这样的东西:
$keys = '[a][b][c]';
$array{$keys} = 'new value';
但是键被视为字符串,这就是我得到的:
$array['[a][b][c]'] = 'new value';
所以我需要一些帮助,向我展示在不使用 eval() 的情况下完成这项工作的正确方法。
顺便说一句,可以有任意数量的数组嵌套,所以这样的答案不是一个好的答案:
$key1 = 'a';
$key2 = 'b';
$key3 = 'c';
$array[$key1][$key2][$key3] = 'new value';
嗨,兄弟,你可以通过一组键来做到这一点:
这是你的数组结构:
$array = array(
'a'=> array(
'b' => array(
'c'=>'some value',
),
),
);
这是 PHP 使用动态键从数组中获取值的代码:
$result = $array; //Init an result array by the content of $array
$keys = array('a','b','c'); //Make an array of keys
//For loop to get result by keys
for($i=0;$i<count($keys);$i++){
$result = $result[$keys[$i]];
}
echo $result; // $result = 'new value'
希望回答对您有所帮助,在这里找到您的工作代码PHPFiddle。
这不是定义密钥的最佳方式,但是:
$array = [];
$keys = '[a][b][c]';
$value = 'HELLO WORLD';
$keys = explode('][', trim($keys, '[]'));
$reference = &$array;
foreach ($keys as $key) {
if (!array_key_exists($key, $reference)) {
$reference[$key] = [];
}
$reference = &$reference[$key];
}
$reference = $value;
unset($reference);
var_dump($array);
如果你必须像这样在一个字符串中定义一个键序列,那么使用一个可以展开的简单分隔符比需要 trim 构建一个单独的数组更简单键,所以像 a.b.c
这样简单的东西比 [a][b][c]
最简单的方法是使用 set method from this library:
Arr::set($array, 'a.b.c', 'new_value');
或者,如果你有键作为数组,你可以使用这种形式:
Arr::set($array, ['a', 'b', 'c'], 'new_value');