2012-04-06 3 views
0

Ich versuche, das Ergebnis eines API-Aufrufs einzeln zu drucken. Ich rufe den YQL-API-Aufruf an. HierWarum habe ich Fehler beim Abrufen jedes Objekts als Array?

ist das PHP-Skript, das ich verwende

<?php 
    if (!$_REQUEST["q"]) return; 

    $query = $_REQUEST["q"]; 

    $q = "'http://google.com/complete/search?output=toolbar&q=$query'"; 

    $query = "select * from xml where url=$q"; 
    $url = "http://query.yahooapis.com/v1/public/yql?q="; 
    $url .= rawurlencode($query); 
    $url .= "&format=json&env=store://datatables.org/alltableswithkeys"; 

    function get_data($url) { 
    $ch = curl_init(); 
    $timeout = 5; 
    curl_setopt($ch,CURLOPT_URL,$url); 
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); 
    curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout); 
    $data = curl_exec($ch); 
    curl_close($ch); 
    return $data; 
} 

$data = get_data($url); 

// decode the data and get the first result set. 
$info = json_decode($data); 

foreach($info['suggestion']['data'] as $i) { 
echo $i; 
} 
?> 

Und das Ergebnis, das ich von der API-Aufruf erhalten wird

cbfunc({ 
"query": { 
"count": 1, 
"created": "2012-04-06T06:13:57Z", 
"lang": "en-US", 
"diagnostics": { 
"publiclyCallable": "true", 
"url": { 
"execution-start-time": "2", 
"execution-stop-time": "59", 
"execution-time": "57", 
"proxy": "DEFAULT", 
"content": "http://google.com/complete/search?output=toolbar&q=fb" 
}, 
"user-time": "59", 
"service-time": "57", 
"build-version": "26247" 
}, 
"results": { 
"toplevel": { 
"CompleteSuggestion": [ 
{ 
    "suggestion": { 
    "data": "fb" 
    }, 
    "num_queries": { 
    "int": "1260000000" 
    } 
}, 
{ 
    "suggestion": { 
    "data": "fbi" 
    }, 
    "num_queries": { 
    "int": "155000000" 
    } 
}, 
{ 
    "suggestion": { 
    "data": "fbi most wanted" 
    }, 
    "num_queries": { 
    "int": "54800000" 
    } 
}, 
{ 
    "suggestion": { 
    "data": "fbi jobs" 
    }, 
    "num_queries": { 
    "int": "119000000" 
    } 
}, 
{ 
    "suggestion": { 
    "data": "fb covers" 
    }, 
    "num_queries": { 
    "int": "82100000" 
    } 
}, 
{ 
    "suggestion": { 
    "data": "fb banners" 
    }, 
    "num_queries": { 
    "int": "13300000" 
    } 
}, 
{ 
    "suggestion": { 
    "data": "fbook" 
    }, 
    "num_queries": { 
    "int": "4050000" 
    } 
}, 
{ 
    "suggestion": { 
    "data": "fbisd" 
    }, 
    "num_queries": { 
    "int": "84300" 
    } 
}, 
{ 
    "suggestion": { 
    "data": "fbanners" 
    }, 
    "num_queries": { 
    "int": "789000" 
    } 
}, 
{ 
    "suggestion": { 
    "data": "fbo" 
    }, 
    "num_queries": { 
    "int": "13000000" 
    } 
    } 
] 
} 
} 
} 
}); 

Ich versuche iterieren die Vorschläge Objekt und ich m versucht, die Dateneigenschaft des Vorschlagsobjekts zu drucken.

Und bekomme ich folgende Fehlermeldung:

Fatal error: Cannot use object of type stdClass as array 

Antwort

1

Dies könnte Ihr Problem lösen:

foreach($info['query']['results']['toplevel']['CompleteSuggestion'] as $i) { 
echo $i['suggestion']['data']; 
echo "<br>"; 
} 
+1

Es hat funktioniert !! Vielen Dank ! Das ist, was ich gerade wollte. –

0

Um Array Ausgang benötigen Sie true Parameter als zweites setzen. Sonst sein zurückkehrendes Objekt. Siehe: json_decode

// decode the data and get the first result set. 
$info = json_decode($data, true); 
//var_dump($info); 

foreach($info['suggestion']['data'] as $i) { 
    echo $i; 
} 
+0

Ich versuche, individuell die Daten-Eigenschaft des Objekts Vorschlag Echo. Und hier ist der Code, den ich dafür verwende. foreach ($ info ['CompleteSuggestion'] ['Vorschlag'] als $ i) { echo $ i ['data']; } –

+0

Aber ich habe immer noch undefined Index Fehler –

+0

Nö noch immer Fehler Undefined Index: CompleteSuggestion –

0

Try json_decode($data, true); zu verwenden. Siehe Handbuch: json_encode().

Second param When TRUE, returned objects will be converted into associative arrays.

1

Nun, es ist Ihre Daten durch eine Javascript-Callback-Funktion eingewickelt Rückkehr cbfunc(JSON_RESPONSE_DATA); .... Sie die cbfunc( von Anfang an und ); vom Ende entfernen und das tun print_r(json_decode(REST_OF_THE_RESPONSE, true)); ... und voila! .. .Sie erhalten das Array ...

Hoffe das hilft.