Php 正在处理阵列以重新生成新阵列

Php 正在处理阵列以重新生成新阵列,php,arrays,Php,Arrays,我调用一个API并接收一个JSON响应,然后将其解码成一个数组。我最终得到的数据如下所示 Array ( [_id] => aasdasdasdasdasd [created] => 2017-01-16T14:11:54.616Z [options] => Array ( [title] => 1 [data] => Array (

我调用一个API并接收一个JSON响应,然后将其解码成一个数组。我最终得到的数据如下所示

Array
(
    [_id] => aasdasdasdasdasd
    [created] => 2017-01-16T14:11:54.616Z
    [options] => Array
        (
            [title] => 1
            [data] => Array
                (
                    [0] => Array
                        (
                            [labelName] =>  Date
                            [labelValues] => Array
                                (
                                    [0] => March 2016
                                )

                        )

                    [1] => Array
                        (
                            [labelName] => Title
                            [labelValues] => Array
                                (
                                    [0] => Food
                                )

                        )

                    [2] => Array
                        (
                            [labelName] => Product
                            [labelValues] => Array
                                (
                                    [0] => Rice
                                )

                        )

                )

        )
)
因为我是在一个循环中做这件事的,所以我收到了很多类似上面的回复。我的目标是从LabelValue中提取值,以便创建文件夹结构

本质上,上面的代码将生成一个映像,对于上面的示例,映像应该放在以下目录结构中

2016>食品>大米>生成的图像

我可以创建文件夹结构,但首先我需要将上述数据放入数组中。我希望阵列看起来像这样

Array
(
    [0] => Array
        (
            [Date] => 2016
            [Title] => Food
            [Product] => Rice
        )

    [1] => Array
        (
            [Date] => second_loop_date
            [Title] => second_loop_title
            [Product] => second_loop_product
        )
    ...
)  
foreach ($output['options'] as $key => $value) {
    if($key == 'data') {
        foreach ($value as $label) {
            foreach ($label as  $labelValue) {
                foreach($labelValue as $output) {
                    print_r("<pre>");
                    print_r($output);
                    print_r("</pre>");
                }
            }
        }
    }
}
我一直在尝试一步一步地获得所需的输出,我一直在打印东西,以便一路调试。我确信有一种比我所做的更有效的方法,但到目前为止,我有类似的方法

Array
(
    [0] => Array
        (
            [Date] => 2016
            [Title] => Food
            [Product] => Rice
        )

    [1] => Array
        (
            [Date] => second_loop_date
            [Title] => second_loop_title
            [Product] => second_loop_product
        )
    ...
)  
foreach ($output['options'] as $key => $value) {
    if($key == 'data') {
        foreach ($value as $label) {
            foreach ($label as  $labelValue) {
                foreach($labelValue as $output) {
                    print_r("<pre>");
                    print_r($output);
                    print_r("</pre>");
                }
            }
        }
    }
}
foreach($output['options']as$key=>$value){
如果($key=='data'){
foreach($标签的值){
foreach($label为$labelValue){
foreach($labelValue作为$output){
印刷品(“”);
$results = array();
foreach ($output['options']['data'] as $data) {
    if (isset($data['labelValues'][0])) {
        $results[$data['labelName']] = $data['labelValues'][0];
    }
}
打印(输出);
$results = array();
foreach ($output['options']['data'] as $data) {
    if (isset($data['labelValues'][0])) {
        $results[$data['labelName']] = $data['labelValues'][0];
    }
}
印刷品(“”);
$results = array();
foreach ($output['options']['data'] as $data) {
    if (isset($data['labelValues'][0])) {
        $results[$data['labelName']] = $data['labelValues'][0];
    }
}
} } } } }
这让我了解了这些值,但我也得到了很多警告,比如

警告:中为foreach()提供的参数无效 第43行的C:\xampp\htdocs\index.php

所以我真的想知道创建这个数组的最佳方法是什么。我看过array_search,但不太确定在这种情况下是否可以使用它


感谢您的任何建议

我认为您的代码有点复杂。您可以直接访问
$output['options']['data']
并允许您删除两个外部循环

foreach ($output['options']['data'] as $item) {
    print_r("<pre>");
    print_r($item['labelValues'][0]);
    print_r("</pre>");
}

注意:我简化了对
labelvalue
的访问,因为从示例数组中可以看出,始终只有一个项。在另一种情况下,您应该使用内部循环迭代所有
labelvalue
,并将它们连接成一个字符串。

我认为您的代码有点复杂。您可以直接访问
$output['options']['data']
并允许您删除两个外部循环

foreach ($output['options']['data'] as $item) {
    print_r("<pre>");
    print_r($item['labelValues'][0]);
    print_r("</pre>");
}

注意:我简化了对
labelvalue
的访问,因为从示例数组中可以看出,始终只有一个项。在另一种情况下,您应该使用内部循环迭代所有
labelvalue
,并将它们连接成一个字符串。

您当前的循环似乎有点复杂

发生此错误是因为您希望迭代字符串(labelName),这是不可能的

将当前循环转换为工作循环,应如下所示:

...
$result = array_combine(
    array_column($output['options']['data'], 'labelName'),
    array_column(array_column($output['options']['data'], 'labelValues'), 0)
);

print_r($result);
foreach($output['options']['data']作为$item){
印刷品(“”);
$results = array();
foreach ($output['options']['data'] as $data) {
    if (isset($data['labelValues'][0])) {
        $results[$data['labelName']] = $data['labelValues'][0];
    }
}
打印($item['labelvalue'][0]);
$results = array();
foreach ($output['options']['data'] as $data) {
    if (isset($data['labelValues'][0])) {
        $results[$data['labelName']] = $data['labelValues'][0];
    }
}
印刷品(“”);
$results = array();
foreach ($output['options']['data'] as $data) {
    if (isset($data['labelValues'][0])) {
        $results[$data['labelName']] = $data['labelValues'][0];
    }
}
}
您当前的循环似乎有点复杂

发生此错误是因为您希望迭代字符串(labelName),这是不可能的

将当前循环转换为工作循环,应如下所示:

...
$result = array_combine(
    array_column($output['options']['data'], 'labelName'),
    array_column(array_column($output['options']['data'], 'labelValues'), 0)
);

print_r($result);
foreach($output['options']['data']作为$item){
印刷品(“”);
$results = array();
foreach ($output['options']['data'] as $data) {
    if (isset($data['labelValues'][0])) {
        $results[$data['labelName']] = $data['labelValues'][0];
    }
}
打印($item['labelvalue'][0]);
$results = array();
foreach ($output['options']['data'] as $data) {
    if (isset($data['labelValues'][0])) {
        $results[$data['labelName']] = $data['labelValues'][0];
    }
}
印刷品(“”);
$results = array();
foreach ($output['options']['data'] as $data) {
    if (isset($data['labelValues'][0])) {
        $results[$data['labelName']] = $data['labelValues'][0];
    }
}
}
使用
array\u列
array\u组合的解决方案
功能:


使用
array\u列
array\u组合
功能的解决方案:


我猜问题在于您两次声明了
$output
——在
$output
上启动
foreach
,然后将
$labelValue循环为$output
。将第二个
$output
更改为类似
$labelValueOutput
的内容。对不起,这是我的错误,在原始代码中进行了更新。我猜问题在于您声明了两次
$output
,您在
$output
上启动了
foreach
,然后,您将
$labelValue循环为$output
。将第二个
$output
更改为类似于
$labelValueOutput
的内容。对不起,这是我的错误,在原始codePerfect中进行了更新,我认为我过于复杂了,一旦开始进入所有循环,就会有点混乱。谢谢你的回答完美,我认为我把它复杂化了,一旦你开始进入所有的循环,它就会变得有点混乱。谢谢你的回答