基于变量字符串访问php多维数组键


Access php multidimensional array key based on a variable string

我已经将项的XML路径存储在一个字符串中,如下所示:response->items->item

我需要做的是访问一个名为$xml_array的数组,如下所示:

$xml_array['response']['items']['item']

当我把它写在代码中时,它就起作用了。问题是,我希望它能迅速完成。

我用它将response->items->item转换为['response']['items']['item']:

$xml_path = 'response->items->item';
$explode_path = explode('->', $xml_path);
$correct_string = false;
foreach($explode_path as $path) {
   $correct_string .= '['''.$path.''']';
}

问题是我不能通过这样做访问$xml_array$xml_array[$correct_string]

所以我最终得到了这个:

$xml_tag = 'title';
$xml_path = 'response->items->item';
$correct_string = '$items = $xml2array';
$explode_path = explode('->', $xml_path);
foreach($explode_path as $path) {
    $correct_string .= '['''.$path.''']';
}
$correct_string .= ';';
eval($correct_string);
foreach($items as $item) {
    echo $item[$xml_tag].'<br />';
}

并通过CCD_ 7阵列访问CCD_。有什么方法可以做到这一点并避免使用eval()吗?

提前感谢!

我很高兴您的目标是停止使用eval()。:-)

如果我理解正确的话,您有一个$items数组,并且您正试图根据$xml_path的内容来定位其中的内容。

我显然没有在你的数据上测试过,但这样的东西呢?

<?php
$xml_path = 'response->items->item';
$explode_path = explode('->', $xml_path);
foreach($items as $item) {
  $step = $item;
  foreach($explode_path as $path) {
    $step = $step[$path];
  }
  echo $step . '<br />';
}

其想法是,对于每一个$items,您都要遍历分解路径,通过将$step细化到未知的深度来缩小搜索范围。

当然,这假设对于$xml_path的任何值,$items数组中都会有一个相应的项集。否则,您将需要添加一些错误处理。(您可能无论如何都想要错误处理。)

$xml_tag = 'title';
$xml_path = 'response->items->item';
$explode_path = explode('->', $xml_path);
$items = $xml2array[$explode_path[0]][$explode_path[1]][$explode_path[2]];
foreach($items as $item) {
    echo $item[$xml_tag].'<br />';
}
    $array = [];
    foreach($items as $item) {
        $inputs[] = [
            $item->name => $item->value
        ];
    }