私がこの種のコードを持っているとしましょう:
$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 = [];
$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);
このような文字列でキーのシーケンスを定義する必要がある場合は、個々のキーの配列を作成するためにトリミングする必要はなく、展開できる単純なセパレータを使用する方が簡単なので、次のような単純なものの方a.b.c
が簡単です。で作業する[a][b][c]
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加