2017-10-22 1 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

내가 본 오타. return $ result; $ results를 반환해야합니다. OP가 항상 이것을 보지 못한다 : – TimBrownlaw

+0

@TimBrownlaw thx – mickmackusa

관련 문제