可能重复:
PHP: Use a string as an array index path to retreive a value
我有一个像这样的数组:
$array['image']['comment'] = 'something';
$array['image']['tag'] = 'happy';
$array['image']['colors']['blue'] = '12345';
如果我有一个字符串中每个元素的路径,我该如何设置或获取数组值?
例如,$path = 'image/colors/blue';
以下函数应返回12345
function get_array($array, $path)
{
//what goes here?
}
function set_array($array, $path, $value)
{
//what goes here?
}
答案 0 :(得分:2)
试试这个:
$arr = array('a' => 'A', 'b' => array('c' => 'C', 'd' => array('e'=>'E')));
function read_array($array, $path)
{
if($pos = strpos($path, '/') !== false){
$key = substr($path, 0, $pos);
$restOfKey = substr($path, $pos + 1);
return read_array($array[$key], $restOfKey);
} else {
$key = $path;
return $array[$key];
}
}
echo read_array($arr, 'a'); //A
echo read_array($arr, 'b/c'); //C
echo read_array($arr, 'b/d/e'); //E
您当然应该添加错误检查和所有。
答案 1 :(得分:1)
试试这个。非常基本,但它可能会为您提供一个跳跃点:
$array['image']['comment'] = 'something';
$array['image']['tag'] = 'happy';
$array['image']['colors']['blue'] = '12345';
function get_array($array, $path) {
if(strpos('/', $path) > 0) {
list($first, $second, $third) = explode('/', $path);
return $array[$first][$second][$third];
}
}
get_array($array, 'image/colours/blue');
答案 2 :(得分:0)
您可以在路径字符串上调用split或explode,并将各个值插入每个维度。这不是没有限制的,但我假设你对这个深度的例子有一个粗略的想法。
function getPathVal($array, $path) {
$path_array = explode("/", $path);
$cnt = count($path_array);
if ($cnt == 3) {
return $array[$path_array[0]][$path_array[1]][$path_array[2]];
} else if ($cnt == 2) {
return $array[$path_array[0]][$path_array[1]];
} else if ($cnt == 1) {
return $array[$path_array[0]];
} else {
return "";
}
}