Доступа к концу-селектор в х-мерный массив


У меня большая Array что приходит из Instagram-это публичный API, пример по ссылке:

https://www.instagram.com/kinfolk/?__a=1

И я получаю доступ $response['graphql']['user'] что в свою очередь приводит:

Массив в ссылке - это слишком большой, чтобы быть размещены здесь. Также имеет приятный формат!

К сожалению, для того, чтобы мне получить доступ к ссылкам на фотографии и любые другие данные, мне придется спуститься на несколько уровней:

protected function get_links() {
    $response = $this->instagram_object->get_data(); /* the JSON decoded data */

    if( is_wp_error($response) ) {
        return new \WP_Error( 'invalid-json', esc_html__( 'Ouch. The data was not parsed correctly. Cannot continue.' ) );
    }

    foreach ( $response['graphql']['user'] as $item ) {
        if ( isset( $item['edges'] ) ) {
            foreach( $item['edges'] as $edge ) {
                $image = array('real_link' => 'src' );
                $image['real_link'] = 'https://www.instagram.com/p/' . $edge['node']['code'] . '?taken-by=' . $this->username;
                $image['src'] = $edge['node']['thumbnail_resources'][0]['src'];
                $images_links[] = $image;
            }
        }
    }
    return $images_links;
}

Код в не-CMS окружающей среды, чистый PHP:

<?php

function get_links() {

    $link = 'https://www.instagram.com/kinfolk/?__a=1';
    $data = file_get_contents($link);
    $response = json_decode($data, true);

    $image          = array( 'real_link' => 'src' );
    $image_links    = [];

    foreach ( $response['graphql']['user'] as $item ) {
        if ( isset( $item['edges'] ) ) {
            foreach( $item['edges'] as $edge ) {
                $image['real_link'] = 'https://www.instagram.com/p/' . $edge['node']['shortcode'] . '?taken-by=' . 'kinfolk';
                $image['src'] = $edge['node']['thumbnail_resources'][0]['src'];
                $images_links[] = $image;
            }
        }
    }
    return $images_links;
}

$instagram_images_links = get_links();

foreach( $instagram_images_links as $image ) {
    echo $image['real_link'] . ' and also ' . $image['src'];
    echo "<br><br>";
}

?>

Это не секрет. Код действительно некрасиво. Пойти в foreach->if->foreach не желательно и я заметил провал в производительности, когда изображения отображаются на нем, я тоже пуш в другой массив.

Мои цели:

1) сократить петли.

2) Найти лучший способ, чтобы создать ассоциативный массив, который содержит ссылку и ссылку image_src, что мне нужно использовать.

Несколько правок, ключевые моменты:

1) в if ( isset( $item['edges'] ) ) это необходимо, потому что в большей размерности массива, которая $item ($response['graphql']['user']) нет, кодирующий 17 элементов в массиве, некоторые строки, некоторые являются логическими значениями - я должен решить, которые по краям, так что я могу перебрать их.

Как я могу добиться этого?



75
1
задан 13 марта 2018 в 11:03 Источник Поделиться
Комментарии