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

时间:2012-03-27 05:12:03

标签: php arrays

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

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

$ xml_array [ '响应'] [ '项'] [ '项目']

当我在代码中编写它时,它可以工作。问题是我希望它能够在飞行中完成。

我用它将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 />';
}

并通过$xml_array数组访问$items数组。有什么方法可以做到这一点并避免使用eval()?

提前致谢!

3 个答案:

答案 0 :(得分:6)

我很高兴您的目标是停止使用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 />';
}

我们的想法是,对于每个$项目,您都会逐步浏览展开的路径,通过将$step精炼到某个未知深度来缩小搜索范围。

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

答案 1 :(得分:3)

$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 />';
}

答案 2 :(得分:0)

    $array = [];
    foreach($items as $item) {
        $inputs[] = [
            $item->name => $item->value
        ];
    }