2010-02-12 6 views
3

다른 사람들의 질문과 답변을 많이 읽은 후 처음으로 여기에서 질문합니다. 그것 주셔서 감사합니다 :)PHP에서 객체/배열의 다른 값을 기반으로 값을 얻는 방법

메신저 vimeo의 API를 사용하려고 노력하고 있습니다. 메신저가 의도 한대로 사용할 수 없다는 것을 알게되었습니다. 나는 당신들 중 일부를 위해 그것의 간단한 생각하지만, 주위에 내 머리를 감쌀 수 없습니다.

나는 섬네일 URL을 얻기 위해 필요한 비디오 ID를 가지고있다. 나는 "이 ID에 대한 엄지 손가락 URL"이란 응답을 "묻는다"고하고 싶습니다. 그리고 모든 이드는 그렇게 반복합니다.

응답 객체가 옷을 벗었 버전에서 다음과 같습니다

:

stdClass Object 
(
    [videos] => stdClass Object 
     (
      [video] => Array 
       (
        [0] => stdClass Object 
         (
          [id] => 8128888 
          [thumbnails] => stdClass Object 
           (
            [thumbnail] => Array 
             (
              [0] => stdClass Object 
               (
                [height] => 75 
                [width] => 100 
                [_content] => http://ts.vimeo.com.s3.amazonaws.com/370/931/37093137_100.jpg 
               ) 
             ) 
           ) 
         ) 
        [1] => stdClass Object 
         (
          [id] => 8760295 
          [thumbnails] => stdClass Object 
           (
            [thumbnail] => Array 
             (
              [0] => stdClass Object 
               (
                [height] => 75 
                [width] => 100 
                [_content] => http://ts.vimeo.com.s3.amazonaws.com/417/146/41714684_100.jpg 
               ) 
             ) 
           ) 
         ) 
       ) 
     ) 
) 

내가 (다시 옷을 벗었)이처럼 사용할 필요가 자사의 인용 부분은 내가 알아낼 질수 :

<?php while ($vid->fetchRecord()) : 
    $vid_id = $vid->get_field('video'); 
    $thumb = "find [video][thumbnail][0][_content] where [video][id] = $vid_id"; 
?> 
<img src="<?php echo $thumb;?>" 
<?php endwhile ?> 

그럼 내가 얼마나 가까이에있어? : P

답변

2

구조체를 사용하기에 더 간단한 배열로 재정의 할 수 있습니다. 다음은 구조가 위의 $response에 저장되어 가정

URL 매핑에 ID의 배열 $videos 당신을 떠날 것이다
$videos = array(); 
foreach($response->videos->video as $video) { 
    if(count($video->thumbnails->thumbnail) > 0) { 
    $videos[$video->id] = $video->thumbnails->thumbnail[0]->_content; 
    } 
} 

:

Array(
    '8128888' => 'http://ts.vimeo.com.s3.amazonaws.com/370/931/37093137_100.jpg', 
    '8760295' => 'http://ts.vimeo.com.s3.amazonaws.com/417/146/41714684_100.jpg' 
) 

귀하의 출력 코드는 그럼 그냥 할 필요가있다 :

<?php while ($vid->fetchRecord()) : 
    $vid_id = $vid->get_field('video'); 
    $thumb = $videos[$vid_id]; 
?> 
<img src="<?php echo $thumb;?>" 
<?php endwhile ?> 
+0

예, 완벽합니다. 고마워요. – ugreen

1
// Assuming the response you posted above is stored in the variable $response 

$thumbnails = array (); 

foreach ($response->videos->video as $vID => $v) 
{ 
     $thumbnails [ $vID ] = $v->thumbnails->thumbnail[0]->_content; 
} 
+0

고마워요.하지만 Cryos의 대답에갔습니다. 그는 나를 설명하는 멍청이가 이해할 수 있도록 그것을 설명했다. 그러나 지금 나는 당신의 대답이 똑같이하는 것을 봅니다. – ugreen

0

나는 코드의 첫 번째 부분을 수정하고있어 경우 비디오는 그렇게

var_dump($responseObject); 

그래서 당신이 시도하고 모두를위한 작은 이미지를 얻을 수 가정 다음 반환 : 같은 것을 실행에 대응할 수있다 입력했습니다 '

<?php foreach($responseObject->videos->video as $video) { ?> 
    <img src="<?= $video->thumbnails->thumbnail[0]->_content?>" /> 
<?php } ?> 

이것은 당신이 시도 할 생각입니다 while() 루프로 수행 할 수 있습니다.

+0

그래,하지만 그게 나에게 URL을 제공하고, Cryo가 제안한대로 각 ID에 매핑해야합니다. – ugreen

0

는이 같은 위의 게시 된 객체/배열을 걸을 수 :

// $vid is the object you posted above 
foreach($vid->videos->video as $key => &$video) { 
    echo "id: " . $video->id; 
    echo "thumbnails: \n"; 
    foreach($video->thumbnails->thumbnail as $key => $thumb) { 
     echo "thumb {$key}: <img src=\" " . $thumb->_content . " \"> \n"; 
    } 
} 

이 간단한 방법이 있습니다, 당신은 하나 또는 여러 개의 작은 이미지가 처리 여부 신경 쓸 필요가없는 경우.

관련 문제