Set multi-dimensional array by key path from array values?

前端 未结 5 1602
南笙
南笙 2020-12-10 18:38

Sorry for the terrible title, best I could think of at the time! Say I have a \'path\' array like so;

array(\'this\', \'is\', \'the\', \'path\')

5条回答
  •  旧时难觅i
    2020-12-10 19:17

    I use two similar functions to get and set values by their path within an array:

    function array_get($arr, $path)
    {
        if (!$path)
            return null;
    
        $segments = is_array($path) ? $path : explode('/', $path);
        $cur =& $arr;
        foreach ($segments as $segment) {
            if (!isset($cur[$segment]))
                return null;
    
            $cur = $cur[$segment];
        }
    
        return $cur;
    }
    
    function array_set(&$arr, $path, $value)
    {
        if (!$path)
            return null;
    
        $segments = is_array($path) ? $path : explode('/', $path);
        $cur =& $arr;
        foreach ($segments as $segment) {
            if (!isset($cur[$segment]))
                $cur[$segment] = array();
            $cur =& $cur[$segment];
        }
        $cur = $value;
    }
    

    Then you use them like this:

    $value = array_get($arr, 'this/is/the/path');
    $value = array_get($arr, array('this', 'is', 'the', 'path'));
    array_set($arr, 'here/is/another/path', 23);
    

提交回复
热议问题