Php 正在处理阵列以重新生成新阵列
我调用一个API并接收一个JSON响应,然后将其解码成一个数组。我最终得到的数据如下所示Php 正在处理阵列以重新生成新阵列,php,arrays,Php,Arrays,我调用一个API并接收一个JSON响应,然后将其解码成一个数组。我最终得到的数据如下所示 Array ( [_id] => aasdasdasdasdasd [created] => 2017-01-16T14:11:54.616Z [options] => Array ( [title] => 1 [data] => Array (
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中进行了更新,我认为我过于复杂了,一旦开始进入所有循环,就会有点混乱。谢谢你的回答完美,我认为我把它复杂化了,一旦你开始进入所有的循环,它就会变得有点混乱。谢谢你的回答