如何在php中将多个数组或json合并为一个?

bvk5enib  于 2023-07-01  发布在  PHP
关注(0)|答案(1)|浏览(127)

背景

这是一个WordPress插件开发问题。有一个API可以返回数组中的动态url地址:

array(4) {
    [0]=>string(22) "https://t.somedomain.com"
    [1]=>string(20) "https://somedomain.com"
    [2]=>string(23) "http://192.168.2.209/km"
    [3]=>string(23) "http://somedomain2/km"
    ....
}

我已经能够检索上面的数组并将其保存到PHP $urls中。
上面的每个url地址都可以在GET操作后返回JSON响应,比如如果我GET一个url,它会像下面这样响应:

{
    "name":"HR",
    "floor":3,
    "staff": [
        { "name":"John", "info":[ "Java", "Google", "Market" ] },
        { "name":"Alex", "info":[ "PHP", "Swift", "Market" ] },
        { "name":"Duke", "info":[ "HTML", "Market" ] }
    ]
}

进球

从所有url中获取所有json内容并合并为一个,并解码这些JSON,以便php可以操作这些数据。

迄今取得的进展

因为现在所有的url都存储在变量$urls中,所以我可以使用foreach()来获取所有$urls中的JSON内容。

foreach ($urls as $url) {
    $response = wp_remote_retrieve_body(wp_remote_get($url));
    $obj = json_decode($response);
    // var_dump($obj);
}

这将返回所有URL的结果,但逐个分开。
因为url会被改变,并且可能有大量的url,所以使用以下命令并不明智:

array_merge($array1, $array2);

问题

有没有可能将每个$response(json)合并为一个?
或者有没有可能把所有解码的php对象合并成一个?
欢迎任何建议。感谢您对此的关注。

oaxa6hgo

oaxa6hgo1#

感谢@Barmar,我把这个问题看得太复杂了,经过反复尝试,我已经找到了解决方案:

$merged = array(); 
//Here to declear this $merged is an array.

    foreach ( $urls as $url ){
        $response = wp_remote_retrieve_body( wp_remote_get( $url ) );
        $obj = json_decode( $response );
            if(is_array($obj)){  //prevent empty or error ones goes to next step
                $merged = array_merge($merged,$obj);
//Yes still have to use arrary_merge() function, add one to $merged after another 
//till the loop is end. 
//So $merged will contain all the decoded json data.

            }
    }
    $result = json_encode($merged); 

//This is an example we can now deal with $merged with php, 
//sort, insert, modify staff... 
//here I transcoded $merged to a JSON again for further output.

上面的代码正在工作。不太熟悉array_merge(),从现在开始这应该很简单。

相关问题