Как получить значение на основе другого значения из объекта / массива в php - PullRequest
3 голосов
/ 12 февраля 2010

Мой первый вопрос здесь, после множества вопросов и ответов других людей. Спасибо за это:)

Я пытаюсь работать с API Vimeo, и я получаю ответ, который я не могу понять, как я намерен. Я думаю, что это просто для некоторых из вас, ребята, но я не могу обернуть голову вокруг этого.

Я получил несколько идентификаторов видео, для которых мне нужно получить URL-адрес миниатюры. Я хотел бы «спросить» ответ «Какой 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

Ответы [ 4 ]

2 голосов
/ 12 февраля 2010

Вы можете переопределить эту структуру в более простой массив для вашего использования. Далее предполагается, что приведенная выше структура хранится в $response:

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

Это оставит вас с массивом $videos отображений идентификатора в 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'
)

Тогда ваш выходной код будет просто:

<?php while ( $vid->fetchRecord() ) :
    $vid_id = $vid->get_field('video');
    $thumb = $videos[$vid_id];
?>
<img src="<?php echo $thumb;?>" 
<?php endwhile ?>
1 голос
/ 12 февраля 2010
// 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 голосов
/ 12 февраля 2010

Вы можете пройти вышеупомянутый размещенный объект / массивы так:

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

Существуют более простые способы, если вам не нужно заботиться о том, есть ли один или несколько эскизов.

0 голосов
/ 12 февраля 2010

Если я прав, первая часть введенного вами кода может соответствовать выполнению чего-то вроде этого:

var_dump($responseObject);

Итак, следуя этому предположению, вы можете попытаться получить миниатюры для всех возвращенных видео следующим образом:

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

Это то, что, я думаю, вы пытаетесь выполнить с помощью цикла while ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...