2017-10-22 104 views
0

为什么我不能在函数循环时返回?为什么我只有1个结果没有循环?这里是我的代码:循环时不能返回

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")); 

任何替代?

+1

你正在返回你的'foreach'循环中的数组。尝试在'foreach'之外分配一个新变量,然后在循环中设置它的数据,然后在'foreach'之外返回指定的变量。 – eeya

+0

另外,不建议您在json数据上执行'str_replace()'。这可能会无意中破坏您的数据。最好先'json_decode()'然后处理键和值。如果在解码之前必须执行此字符串操作,请使用其他函数/进程。 – mickmackusa

回答

1

未经测试的代码:

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; 
} 

我没有任何样本数据来验证我的代码。我假设'MusicInfoCallback()是卷曲字符串的开始和结束。我建议将所有数据打包到(自动)索引数组中。

$songurl也被“困住”在该功能的范围内。

+0

只是我看到的错字。返回$ result;应该返回$结果; OPs并不总是能看到这个:) – TimBrownlaw

+0

@TimBrownlaw thx – mickmackusa