0

各値が混合された連想配列として持って$optionsいます(文字列または他の配列にすることができます)。そこにオブジェクトはありません。
$keysは数値配列であり、キーの数は実行時に決定されます。

この式に似た結果が欲しい
$options[$keys[0]][$keys[1]].......[$keys[count($keys)-1]] = $value;

たとえば、もし$keys = array('key1')、私がしたい
$options['key1'] = $value;
& もし$keys = array('key1', 'key2')、私がしたい
$options['key1']['key2'] = $value; & など

array_replace_recursive の問題は、$value 自体が配列である可能性があることです。array_replace_recursive の深さを制限するにはどうすればよいですか? それとも他の方法ですか?

4

3 に答える 3

1

私はこのようなものを作りました:

$options = array('key1' => array('key2' => array('key3' => 'value')));
$keys = array('key1', 'key2', 'key3');

$search = &$options;
foreach ($keys as $key) {
    $search = &$search[$key];
}
$search = 'changed value';

var_dump($options);

次のキーへの参照はいつでも作成できます。

于 2013-01-09T11:27:46.643 に答える
0

私はついにそれを働かせました。@Benjamin Paapに感謝します。彼の答えは、正確な解決策にたどり着くのに役立ちました

$options = array('key1' => array('key2' => array('key3' => 'value')));
$keys = array('key1', 'key2', 'key3');

$length = count($keys);
$search = &$options;
foreach ($keys as $key => $value) {
    // key doesn't exist or value is not an array
    if(!isset($search[$value]) || !is_array($search)) {
        $search = (array) $search;
        $search[$value] = array();
    }

    $search = &$search[$value];

    // last iteration
    if($length - 1 === $key) {
        $search = 'new value';
    }
}
unset($search);
var_dump($options);
于 2013-01-09T12:16:32.540 に答える
0

配列はデータ構造であり、その中にコードやループを入れることはできないため、これは不可能だと思います。解決策が得られたら、Google で更新します :)

于 2013-01-09T12:00:30.570 に答える