如何将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);