2010-02-12 10 views
3

Ma première question ici, après avoir apprécié beaucoup d'autres questions et réponses d'autres peuples. Merci pour cela :)Comment obtenir une valeur basée sur une autre valeur d'un objet/tableau en php

Im essayant de travailler avec l'API de vimeo, et im obtenir une réponse que je ne peux pas comprendre à utiliser comme je l'ai prévu. Je pense que c'est simple pour certains d'entre vous, mais je ne peux pas m'en passer la tête.

J'ai reçu un tas d'identifiants de vidéos dont j'ai besoin pour obtenir l'URL de miniatures. Je voudrais "demander" la réponse "Quelle est l'URL du pouce pour cet id" et boucle si tous mes id est comme ça.

L'objet de réponse ressemble à ceci dans une version dépouillée:

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

-je utiliser comme ça (encore une fois dépouillée), sa partie cité, je ne peux pas comprendre:

<?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 ?> 

Alors, à quel point suis-je proche? : P

Répondre

2

Vous pouvez redéfinir cette structure en un tableau plus simple pour votre utilisation. Ce qui suit suppose la structure ci-dessus est stockée dans $response:

$videos = array(); 
foreach($response->videos->video as $video) { 
    if(count($video->thumbnails->thumbnail) > 0) { 
    $videos[$video->id] = $video->thumbnails->thumbnail[0]->_content; 
    } 
} 

qui vous laissera avec un tableau $videos d'id mappings url:

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' 
) 

Votre code de sortie serait alors juste besoin d'être:

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

Oui, fonctionne parfaitement. Merci beaucoup – 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

Merci, mais je suis allé pour la réponse de Cryos. Il l'a expliqué si un noob comme moi a compris. Mais maintenant je vois que ta réponse fait la même chose. – ugreen

0

Si je ne me trompe pas la première partie du code Avez entré peut correspondre à exécuter quelque chose comme ceci:

var_dump($responseObject); 

suivant donc cette hypothèse, vous pouvez essayer d'obtenir une vignette pour tous revenus des vidéos comme ça:

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

Voici ce que je pense que vous essayez accomplir avec votre boucle while().

+0

ouais mais cela ne me donne que les URL, besoin de le mapper à chaque ID, comme le suggère Cryo – ugreen

0

Vous pouvez marcher les objets affichés ci-dessus/tableaux comme celui-ci:

// $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"; 
    } 
} 

Il existe des moyens plus simples, si vous n'avez pas besoin de prendre soin wheter il y a seulement une ou plusieurs vignettes.

Questions connexes