在PHP中动态创建/插入关联数组

Emi*_*mil 5 php associative-array

我正在尝试动态地在PHP中构建一个关联数组,而不是让我的策略正确.基本上,我想在数组结构中的某个深度插入一个值,例如:

$array['first']['second']['third'] = $val;
Run Code Online (Sandbox Code Playgroud)

现在,问题是,我不确定该深度是否可用,如果不是,我想为每个级别创建键(和数组),最后将值插入正确的级别.

由于我在我的代码中做了很多这样的事情,我厌倦了做一大堆"array_key_exists",所以我想做一个为我构建数组的函数,给出一个关键字列表.任何有关良好战略的帮助都表示赞赏.我确信有一种非常简单的方法,我只是没有得到它......

use*_*291 9

如果你这样做,php不会责怪你

$array['first']['second']['third'] = $val;
print_r($array);
Run Code Online (Sandbox Code Playgroud)

如果您不希望您的密钥被硬编码,这是一个灵活的解决方案

/// locate or create element by $path and set its value to $value
/// $path is either an array of keys, or a delimited string
function array_set(&$a, $path, $value) {
    if(!is_array($path))
        $path = explode($path[0], substr($path, 1));
    $key = array_pop($path);
    foreach($path as $k) {
        if(!isset($a[$k]))
            $a[$k] = array();
        $a = &$a[$k];
    }
    $a[$key ? $key : count($a)] = $value;
}

// example:
$x = array();

array_set($x, "/foo/bar/baz", 123);
array_set($x, "/foo/bar/quux", 456);
array_set($x, array('foo', 'bah'), 789);
Run Code Online (Sandbox Code Playgroud)

  • 不,它没有,但我考虑使用非初始化变量(如内部数组)不良的编码风格.我想PHP会生成严格的通知. (2认同)