【问题标题】:How to pull specific data from multidimensional array如何从多维数组中提取特定数据
【发布时间】:2016-10-24 14:09:38
【问题描述】:

我正在将 XML 文件转换为关联数组以提取数据,问题是我必须根据数组数量进行 10 个循环才能获取数据。

有没有更好的方法来获取特定列数据而无需创建许多循环?因为我想将它们分配给变量。

我试图从中获取数据的数组

 Array
(
    [catalog] => Array
        (
            [book] => Array
                (
                    [0] => Array
                        (
                            [took] => Array
                                (
                                    [dodo] => Array
                                        (
                                            [ahmadz] => Array
                                                (
                                                    [lolo] => Array
                                                        (
                                                            [author] => Ralls, Kim
                                                            [title] => Midnight Rain
                                                            [genre] => Fantasy
                                                            [price] => 5.95
                                                            [publish_date] => 2000-12-16
                                                            [description] => A former architect battles corporate zombies, 
                              an evil sorceress, and her own childhood to become queen 
                              of the world.
                                                        )

                                                )

                                        )

                                )

                        )

                    [1] => Array
                        (
                            [took] => Array
                                (
                                    [dodo] => Array
                                        (
                                            [ahmadz] => Array
                                                (
                                                    [lolo] => Array
                                                        (
                                                            [author] => Ralls, Kim
                                                            [title] => Midnight Rain
                                                            [genre] => Fantasy
                                                            [price] => 5.95
                                                            [publish_date] => 2000-12-16
                                                            [description] => A former architect battles corporate zombies, 
                              an evil sorceress, and her own childhood to become queen 
                              of the world.
                                                        )

                                                )

                                        )

                                )

                        )

                )

        )

)

我删除了所有其他数据以使其更易于阅读,但数组中还有许多其他值。无论如何,我如何获得作者的价值例如。

echo $array['author']; 

假设我有很多作者数据,而不是上面例子中的一个

请帮忙!

已编辑.....................

Array
(
    [catalog] => Array
        (
            [book] => Array
                (
                    [0] => Array
                        (
                            [took] => Array
                                (
                                    [dodo] => Array
                                        (
                                            [ahmadz] => Array
                                                (
                                                    [lolo] => Array
                                                        (
                                                            [tata] => Array
                                                                (
                                                                    [author] => jac1
                                                                    [title] => Midnight Rain1
                                                                    [genre] => Fantasy
                                                                    [price] => 5.95
                                                                    [publish_date] => 2000-12-16
                                                                    [description] => A former architect battles corporate zombies.
                                                                )

                                                            [tata2] => Array
                                                                (
                                                                    [author] => jack2
                                                                    [title] => Midnight Rain1
                                                                    [genre] => Fantasy
                                                                    [price] => 5.95
                                                                    [publish_date] => 2000-12-16
                                                                    [description] => A former architect battles corporate zombies.
                                                                )

                                                        )

                                                )

                                        )

                                )

                        )

                    [1] => Array
                        (
                            [took] => Array
                                (
                                    [dodo] => Array
                                        (
                                            [ahmadz] => Array
                                                (
                                                    [lolo] => Array
                                                        (
                                                            [tata] => Array
                                                                (
                                                                    [author] => jack3
                                                                    [title] => Midnight Rain1
                                                                    [genre] => Fantasy
                                                                    [price] => 5.95
                                                                    [publish_date] => 2000-12-16
                                                                    [description] => A former architect battles corporate zombies.
                                                                )

                                                            [tata2] => Array
                                                                (
                                                                    [author] => jack4
                                                                    [title] => Midnight Rain1
                                                                    [genre] => Fantasy
                                                                    [price] => 5.95
                                                                    [publish_date] => 2000-12-16
                                                                    [description] => A former architect battles corporate zombies.
                                                                )

                                                        )

                                                )

                                        )

                                )

                        )

                )

        )

)

正如您在上面看到的,我只想获取具有父键 tata 而不是 tata2 的值

这样我就可以将它们分别插入到数据库中

【问题讨论】:

  • 我不太明白这个问题。您可以使用$array['catalog']['book']['took']['dodo']['ahmadz']['lolo']['author'] 获取作者,无需任何循环。也许您将数组简化得如此之多,以至于问题并不明显,这将有助于显示至少一部分未修改的输入数组。
  • 如果您想要更简洁的代码,我认为您最好使用 XML 解析器。 xpath 之类的东西应该允许您轻松地从 XML 结构内的任何位置获取数据。 us2.php.net/manual/en/simplexmlelement.xpath.php
  • 我试图通过XML提取数据,但是父母的名字彼此不同,因此我无法编写一个路径来获取所有数据。另外我不是 xml 专家,所以我尝试将其转换为更慢但更容易的数组!。
  • 将 XML 转换为数组并不是最好的主意 - 你会丢失信息。将其保留为 SimpleXMLElement 或 DOMDocument 并使用 Xpath 获取它的部分/值。 Xpath 可以不仅仅是一条简单的路径。
  • @user2565853:好的,所以你写的是元素名称可以改变,元素的数量可以改变,对吧?那么你想要的数组元素的确切标准是什么?如果是标签名,你会使用 XPath 而不是使用数组。

标签: php arrays xml multidimensional-array


【解决方案1】:

尝试下面的代码,它将为您提供所有作者作为多维数组中的数组而不使用 forloops..,如果您想从多维数组中检索其他值,那么您需要在 if 条件下在 in_array 中传递数组键并准备数据根据您的要求...

$author_array = array();
array_walk_recursive($your_multidimentional_array, function($value, $key) {
    if (in_array($key, array("author"))) {
        global $author_array;
        $author_array[] = $value;
    }
});
print_r($author_array);

希望这会有所帮助....

【讨论】:

  • 请不要在这种情况下使用全局变量(或者更好:不要使用全局根本)。如果您需要从闭包内修改外部范围内的变量,请在其中定义它,通过对闭包的引用传递它 [即:use (&$varname)] 并在闭包内写入。
  • 感谢它完美运行。感谢您的帮助^^
  • 如果我们有 lolo 和 lolo2 是否可以只获取 lolo 的数据??
  • 是的,您可能需要构建自己的自定义递归函数,该函数将遍历您的多维数组并准备具有您想要过滤的值的自定义数组...
  • 添加了另一个答案,它将根据您的要求为您提供自定义数组...
【解决方案2】:

还可以构建您自己的自定义递归函数并从数组中过滤出所需的值,然后从如下所示的多维数组构建自定义数组,如 lolo=>author 和 lolo1 =>author....

function my_walk_recursive($your_multidimentional_array, $find_value, &$filtered_array) {
    foreach($your_multidimentional_array as $key => $data) {                   
        if($data[$find_value] != '') {
            $filtered_array[$key] = $data['author'];
            return true;
        }
        elseif(is_array($data) && (!empty($data))) {
            $result = my_walk_recursive($data, $find_value, $filtered_array);
            if($result == true) {
                continue;
            }
        }           
    }
    return $filtered_array;
}
$filtered_array =  array();
$final_array = array();
$final_array = my_walk_recursive($test_array, 'author', $filtered_array);
var_dump($final_array);

希望这会有所帮助....

【讨论】:

  • 我真的不知道如何感谢您为帮助我所做的努力。非常感谢。我只是编辑了问题以使其更清楚。我试图在 "$find_value" 中插入 tata,但我什么也没得到。我只想获取具有 tata 键的值。如果你确定有时间。你为我做的已经够多了
猜你喜欢
  • 1970-01-01
  • 2018-06-25
  • 1970-01-01
  • 1970-01-01
  • 2016-09-27
  • 1970-01-01
  • 1970-01-01
  • 2020-09-29
  • 1970-01-01
相关资源
最近更新 更多