2017-10-22 4 views
0

Warum kann ich nicht während der Schleifenfunktion zurückkehren? Warum habe ich gerade 1 Ergebnis wie ohne Looping? Hier ist mein Code:Kann beim Schleifen nicht zurückkehren

function search($get){ 
    $i=0; 

    //print_r($get); 
    foreach($get->itemlist as $song){ 
     $i++; 
     $ch = curl_init(''); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt($ch, CURLOPT_COOKIE, 'wmid=14997771; user_type=2; country=id; session_key=96870dd03ab9280c905566cad439c904;'); 
     curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36'); 
     $json = curl_exec($ch); 
     $json = str_replace('MusicInfoCallback(', '', $json); 
     $json = str_replace(')', '', $json); 
     $json = json_decode($json); 
     $songurl = $json->mp3Url; 
     //print_r($json); 
     return array($i => array("song" => $json->msong, 
           "singer" => $json->msinger, 
           "url" => $song->songid)); 
    } 
} 
print_r(search("key")); 

eine Alternative?

+1

Sie geben Ihr Array in Ihre 'foreach'-Schleife zurück. Versuchen Sie, eine neue Variable außerhalb Ihrer 'foreach' zu setzen, setzen Sie dann ihre Daten innerhalb Ihrer Schleife und geben Sie die zugewiesene Variable außerhalb Ihrer' foreach' zurück. – eeya

+0

Außerdem wird es nicht empfohlen, 'str_replace()' auf json-Daten auszuführen. Dies kann unbeabsichtigt Ihre Daten beschädigen. Es ist besser, 'json_decode()' erst dann mit Schlüsseln und Werten nach zu behandeln. Wenn diese String-Manipulation vor der Decodierung notwendig ist, verwenden Sie eine andere Funktion/einen anderen Prozess. – mickmackusa

Antwort

1

Ungeprüfte Code:

function search($get){ 
    foreach($get->itemlist as $song){ 
     $ch = curl_init(''); 
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
      curl_setopt($ch, CURLOPT_COOKIE, 'wmid=14997771; user_type=2; country=id; session_key=96870dd03ab9280c905566cad439c904;'); 
      curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36'); 
     $json = curl_exec($ch); 
     $json = json_decode(substr($json,18,-1),true); 
     $results[]=['songurl'=>$json['mp3Url'], 
        'song'=>$json['msong'], 
        'singer'=>$json['msinger'], 
        'url'=>$song->songid 
        ]; 
    } 
    return $results; 
} 

Ich habe keine Beispieldaten mit meinem Code zu überprüfen. Ich nehme an, dass 'MusicInfoCallback( und ) der Anfang und das Ende der Curl-Zeichenfolge sind. Ich empfehle, alle Daten in ein (automatisch) indiziertes Array zu packen.

$songurl wurde auch im Rahmen der Funktion "gefangen".

+0

Nur ein Tippfehler, den ich gesehen habe. return $ Ergebnis; sollte Return $ Ergebnisse sein; OPs sehen das nicht immer :) – TimBrownlaw

+0

@TimBrownlaw thx – mickmackusa

Verwandte Themen