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);
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…