php 如何通过路径访问多维数组元素?[副本]

nue99wik  于 2023-09-29  发布在  PHP
关注(0)|答案(3)|浏览(94)

此问题已在此处有答案

10年前关闭。

可能重复:

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?
}
k5hmc34c

k5hmc34c1#

试试这个:

$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

你当然应该添加错误检查和所有。

xkftehaa

xkftehaa2#

试试这个。非常基本,但它可能会为您提供一个跳跃点:

$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');
luaexgnf

luaexgnf3#

您可以只对路径字符串调用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 "";
    }
}

相关问题