如何修复wp_remote_get()错误//从数组中获取值?

时间:2019-06-13 06:52:29

标签: php wordpress

我想在调用外部Api时从数组中获取WordPress上的每个Bank_name。我使用了wp_remote_get()。在对数组执行foreach循环时,出现此错误:

  

为foreach()提供的参数无效。

要调试该错误,我尝试通过提供索引来回显第一个Bank_name。我以两种方式做了完全相同的事情,但一种可行,而另一种却没有。唯一的区别是,一种方式使用wp_remote_get(),而另一种方式使用响应作为数组而不调用任何api。

错误来自哪里?

这不起作用:

    $request = wp_remote_get( 'https://tv-api-dev.azurewebsites.net/api/GetBankInfo' );
    if( is_wp_error( $request ) ) {
        return false; 
    }

    $body = wp_remote_retrieve_body( $request );
    $test = json_decode( $body, true );

    print_r($test) ; 
    echo $test[0]["Bank_name"]; 

以下可以正常工作:

$someJSON = "[\r\n {\r\n \"Bank_id\": 1,\r\n \"Bank_name\": \"Aktia Pankki\"\r\n },\r\n {\r\n \"Bank_id\": 2,\r\n \"Bank_name\": \"Bigbank\"\r\n },\r\n {\r\n \"Bank_id\": 3,\r\n \"Bank_name\": \"POP Pankit\"\r\n },\r\n {\r\n \"Bank_id\": 4,\r\n \"Bank_name\": \"Bonum Pankki\"\r\n },\r\n {\r\n \"Bank_id\": 5,\r\n \"Bank_name\": \"Citibank\"\r\n },\r\n {\r\n \"Bank_id\": 6,\r\n \"Bank_name\": \"Danske Bank\"\r\n },\r\n {\r\n \"Bank_id\": 8,\r\n \"Bank_name\": \"DNB BANK ASA\"\r\n },\r\n {\r\n \"Bank_id\": 9,\r\n \"Bank_name\": \"Handelsbanken\"\r\n },\r\n {\r\n \"Bank_id\": 10,\r\n \"Bank_name\": \"Holvi\"\r\n },\r\n {\r\n \"Bank_id\": 11,\r\n \"Bank_name\": \"Nordea Pankki\"\r\n },\r\n {\r\n \"Bank_id\": 12,\r\n \"Bank_name\": \"OP Ryhmä\"\r\n },\r\n {\r\n \"Bank_id\": 13,\r\n \"Bank_name\": \"S-Pankki\"\r\n },\r\n {\r\n \"Bank_id\": 14,\r\n \"Bank_name\": \"Swedbank\"\r\n },\r\n {\r\n \"Bank_id\": 15,\r\n \"Bank_name\": \"Säästöpankki\"\r\n },\r\n {\r\n \"Bank_id\": 16,\r\n \"Bank_name\": \"Alandsbanken\"\r\n }\r\n]";

  // Convert JSON string to Array
  $someArray = json_decode($someJSON, true);
   print_r($someArray);        // Dump all data of the Array
  echo $someArray[0]["Bank_name"]; // Access Array data
  echo $someArray[0]["Bank_id"]; // Access Array data

从第二种方法中,我得到输出Aktia Pankki1,这也是我从第一种方法中得到的结果,但是我得到了以下消息:

  

警告:输入中非法的字符串偏移量'Bank_name'   C:\ xampp \ htdocs \ wpsummerproject \ wp-content \ themes \ astra \ functions.php   在第181行

3 个答案:

答案 0 :(得分:0)

我尝试了来自给定URL的数据。不知道为什么,但是在第一个WEEK()中,获得的值是带有子项的单个JSON对象。当再次用counter=1&Id=4&type=2332&amount=3232&gstIncluded=3232&paymentMethod=2&notes=2332#fdsf&docId=0&ref=3232&isEdit=true 调用该值时,该值将作为数组获得。您可能想先检查源中的数据如何转换为JSON。似乎有问题。

json_decode()

答案 1 :(得分:0)

尝试:

$url      = 'https://tv-api-dev.azurewebsites.net/api/GetBankInfo';

$response = wp_remote_get( esc_url_raw( $url ) );

/* Will result in $api_response being an array of data,
parsed from the JSON response of the API listed above */

$api_response = json_decode( wp_remote_retrieve_body( $response ), true );

这是来自codex.wordpress.org的示例 您的链接:https://tv-api-dev.azurewebsites.net/api/GetBankInfo进入有效的json。应该可以。

答案 2 :(得分:0)

这将适合您的情况,

$request = wp_remote_get( 'https://tv-api-dev.azurewebsites.net/api/GetBankInfo' );
if( is_wp_error( $request ) ) {
    return false; 
}

$body = wp_remote_retrieve_body( $request );
$test = json_decode( $body,true );
$test = json_decode($test,true);

echo $test[0]['Bank_name'];