如何将json_decode多个数组放在一起?
How to json_decode multiple arrays together?
我正在使用 multi curl 下载多个 URL 并使用 foreach 循环解析它们。以下是这些响应的结构(print_r 结果):
Array(
[0] => {
"Animals": [{
"Number": 1,
"AnimalName": Lion
}],
"Continents": [{
"ContinentName": Africa
}]
}
[1] => {
"Animals": [{
"Number": 1,
"AnimalName": Tiger
}],
"Continents": [{
"ContinentName": Africa
}]
}
[2] => {
"Animals": [{
"Number": 1,
"AnimalName": Leopard
}],
"Continents": [{
"ContinentName": Africa
}]
}
)
考虑到所有回复的结构相同或几乎相同,我想将它们一起处理。或者,更好的是,选择一起处理哪些(例如,可以将数组 1-2 和 3-5 组合在一起)。
在这种情况下,我需要用 str_replace 更改一些单词(这对这段代码很有效),然后 json_decode 它并使用 foreach 循环解析所有内容。不幸的是, json_decode 似乎不能那样工作,而且我没有得到任何 foreach 循环的结果。如果我以 json_decode($res[0], true);
的形式添加数组的数字,则会显示结果。这是完整的代码:
<?php
$downloads = array(
"http://www.example.com/1",
"http://www.example.com/2",
"http://www.example.com/3"
);
$mh = curl_multi_init();
foreach ($downloads as $i => $download) {
$connection[$i]=curl_init($download);
curl_setopt($connection[$i], CURLOPT_HTTPHEADER, array('Accept: application/json'));
curl_setopt($connection[$i], CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($connection[$i], CURLOPT_RETURNTRANSFER,true);
curl_multi_add_handle ($mh,$connection[$i]);
}
do {
$n=curl_multi_exec($mh,$active);
curl_multi_select($mh, 0.7);
} while ($active);
foreach ($downloads as $i => $download) {
$res[$i]=curl_multi_getcontent($connection[$i]);
curl_multi_remove_handle($mh,$connection[$i]);
curl_close($connection[$i]);
}
curl_multi_close($mh);
$old = array('Cat', 'Lion');
$new = array('Dog', 'Tiger');
$resultsall = str_replace($old, $new, $res);
$resultsall = (array) json_decode($res, true); // How to make this work?
// These work:
$results1 = json_decode($res[0], true);
$results2 = json_decode($res[1], true);
$results3 = json_decode($res[2], true);
// This doesn't output anything:
foreach($resultsall['Animals'] as $val1)
{ echo $val1['AnimalName']; }
// This works well:
foreach($results1['Animals'] as $val2)
{ echo $val2['AnimalName']; }
?>
有没有办法一次完成所有 json_decoding?我觉得这是一个非常简单的代码更改,但我尝试的所有更改都不起作用。
当您使用 $mergedArray = array_merge($firstArray, $secondArray)
时,两个数组合并为一个并可通过 $mergedArray
访问。请注意 array_keys 将重新编号。
json_decode
期望 字符串 作为其输入。如果你给它一个数组,它不知道如何处理它。您只需在数组中的每个字符串上分别循环和调用 json_decode
。这种操作的 shorthand 包装器是数组映射:
$resultsall = array_map('json_decode', $res);
不过如果你想传递额外的参数,它需要是:
$resultsall = array_map(function ($json) { return json_decode($json, true); }, $res);
我正在使用 multi curl 下载多个 URL 并使用 foreach 循环解析它们。以下是这些响应的结构(print_r 结果):
Array(
[0] => {
"Animals": [{
"Number": 1,
"AnimalName": Lion
}],
"Continents": [{
"ContinentName": Africa
}]
}
[1] => {
"Animals": [{
"Number": 1,
"AnimalName": Tiger
}],
"Continents": [{
"ContinentName": Africa
}]
}
[2] => {
"Animals": [{
"Number": 1,
"AnimalName": Leopard
}],
"Continents": [{
"ContinentName": Africa
}]
}
)
考虑到所有回复的结构相同或几乎相同,我想将它们一起处理。或者,更好的是,选择一起处理哪些(例如,可以将数组 1-2 和 3-5 组合在一起)。
在这种情况下,我需要用 str_replace 更改一些单词(这对这段代码很有效),然后 json_decode 它并使用 foreach 循环解析所有内容。不幸的是, json_decode 似乎不能那样工作,而且我没有得到任何 foreach 循环的结果。如果我以 json_decode($res[0], true);
的形式添加数组的数字,则会显示结果。这是完整的代码:
<?php
$downloads = array(
"http://www.example.com/1",
"http://www.example.com/2",
"http://www.example.com/3"
);
$mh = curl_multi_init();
foreach ($downloads as $i => $download) {
$connection[$i]=curl_init($download);
curl_setopt($connection[$i], CURLOPT_HTTPHEADER, array('Accept: application/json'));
curl_setopt($connection[$i], CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($connection[$i], CURLOPT_RETURNTRANSFER,true);
curl_multi_add_handle ($mh,$connection[$i]);
}
do {
$n=curl_multi_exec($mh,$active);
curl_multi_select($mh, 0.7);
} while ($active);
foreach ($downloads as $i => $download) {
$res[$i]=curl_multi_getcontent($connection[$i]);
curl_multi_remove_handle($mh,$connection[$i]);
curl_close($connection[$i]);
}
curl_multi_close($mh);
$old = array('Cat', 'Lion');
$new = array('Dog', 'Tiger');
$resultsall = str_replace($old, $new, $res);
$resultsall = (array) json_decode($res, true); // How to make this work?
// These work:
$results1 = json_decode($res[0], true);
$results2 = json_decode($res[1], true);
$results3 = json_decode($res[2], true);
// This doesn't output anything:
foreach($resultsall['Animals'] as $val1)
{ echo $val1['AnimalName']; }
// This works well:
foreach($results1['Animals'] as $val2)
{ echo $val2['AnimalName']; }
?>
有没有办法一次完成所有 json_decoding?我觉得这是一个非常简单的代码更改,但我尝试的所有更改都不起作用。
当您使用 $mergedArray = array_merge($firstArray, $secondArray)
时,两个数组合并为一个并可通过 $mergedArray
访问。请注意 array_keys 将重新编号。
json_decode
期望 字符串 作为其输入。如果你给它一个数组,它不知道如何处理它。您只需在数组中的每个字符串上分别循环和调用 json_decode
。这种操作的 shorthand 包装器是数组映射:
$resultsall = array_map('json_decode', $res);
不过如果你想传递额外的参数,它需要是:
$resultsall = array_map(function ($json) { return json_decode($json, true); }, $res);