2016-11-28 2 views
1

Я пытаюсь получить URL-адрес low_resolution в этом массиве с помощью PHP и сохранить результаты в новом массиве.PHP цикл через массив внутри массива

array(3) { 
    ["low_resolution"]=> 
    array(3) { 
    ["url"]=> 
    string(181) "https://instagram.fskg1-1.fna.fbcdn.net/t51.2885-15/s320x320/e35/c180.0.720.720/15057412_1332184313482140_6642273356848562176_n.jpg?ig_cache_key=MTM5MDE1NzI5MDIyOTAwMjYwMQ%3D%3D.2.c" 
    ["width"]=> 
    int(320) 
    ["height"]=> 
    int(320) 
    } 
    ["thumbnail"]=> 
    array(3) { 
    ["url"]=> 
    string(181) "https://instagram.fskg1-1.fna.fbcdn.net/t51.2885-15/s150x150/e35/c180.0.720.720/15057412_1332184313482140_6642273356848562176_n.jpg?ig_cache_key=MTM5MDE1NzI5MDIyOTAwMjYwMQ%3D%3D.2.c" 
    ["width"]=> 
    int(150) 
    ["height"]=> 
    int(150) 
    } 
    ["standard_resolution"]=> 
    array(3) { 
    ["url"]=> 
    string(188) "https://instagram.fskg1-1.fna.fbcdn.net/t51.2885-15/s640x640/sh0.08/e35/c180.0.720.720/15057412_1332184313482140_6642273356848562176_n.jpg?ig_cache_key=MTM5MDE1NzI5MDIyOTAwMjYwMQ%3D%3D.2.c" 
    ["width"]=> 
    int(640) 
    ["height"]=> 
    int(640) 
    } 
} 
array(3) { 
    ["low_resolution"]=> 
    array(3) { 
    ["url"]=> 
    string(181) "https://instagram.fskg1-1.fna.fbcdn.net/t51.2885-15/s320x320/e35/c180.0.720.720/15043511_1031073267018441_5095610497747648512_n.jpg?ig_cache_key=MTM4Mjc1MTI3MDc2MjYyODE1Ng%3D%3D.2.c" 
    ["width"]=> 
    int(320) 
    ["height"]=> 
    int(320) 
    } 
    ["thumbnail"]=> 
    array(3) { 
    ["url"]=> 
    string(181) "https://instagram.fskg1-1.fna.fbcdn.net/t51.2885-15/s150x150/e35/c180.0.720.720/15043511_1031073267018441_5095610497747648512_n.jpg?ig_cache_key=MTM4Mjc1MTI3MDc2MjYyODE1Ng%3D%3D.2.c" 
    ["width"]=> 
    int(150) 
    ["height"]=> 
    int(150) 
    } 
    ["standard_resolution"]=> 
    array(3) { 
    ["url"]=> 
    string(188) "https://instagram.fskg1-1.fna.fbcdn.net/t51.2885-15/s640x640/sh0.08/e35/c180.0.720.720/15043511_1031073267018441_5095610497747648512_n.jpg?ig_cache_key=MTM4Mjc1MTI3MDc2MjYyODE1Ng%3D%3D.2.c" 
    ["width"]=> 
    int(640) 
    ["height"]=> 
    int(640) 
    } 
} 
array(3) { 
    ["low_resolution"]=> 
    array(3) { 
    ["url"]=> 
    string(164) "https://instagram.fskg1-1.fna.fbcdn.net/t51.2885-15/s320x320/e35/14474415_1652350801744421_4326205623935959040_n.jpg?ig_cache_key=MTM1MjkxNTUwNDI2ODEwMDc2NA%3D%3D.2" 
    ["width"]=> 
    int(320) 
    ["height"]=> 
    int(320) 
    } 
    ["thumbnail"]=> 
    array(3) { 
    ["url"]=> 
    string(164) "https://instagram.fskg1-1.fna.fbcdn.net/t51.2885-15/s150x150/e35/14474415_1652350801744421_4326205623935959040_n.jpg?ig_cache_key=MTM1MjkxNTUwNDI2ODEwMDc2NA%3D%3D.2" 
    ["width"]=> 
    int(150) 
    ["height"]=> 
    int(150) 
    } 
    ["standard_resolution"]=> 
    array(3) { 
    ["url"]=> 
    string(171) "https://instagram.fskg1-1.fna.fbcdn.net/t51.2885-15/s640x640/sh0.08/e35/14474415_1652350801744421_4326205623935959040_n.jpg?ig_cache_key=MTM1MjkxNTUwNDI2ODEwMDc2NA%3D%3D.2" 
    ["width"]=> 
    int(640) 
    ["height"]=> 
    int(640) 
    } 
} 

Я попытался с помощью петель и Еогеасп и не может получить желаемый результат. Это мой код до сих пор

for($i=0; $i < count($images['items']); $i++){ 
    $data = $images['items'][$i]['images']; 
     if (is_array($data) || is_object($data)) 
     { 
     var_dump($data); 
     } 
} 

$ изображения переменного содержат все данные, которые имеют такую ​​структуру:

array(3) { 
    ["status"]=> 
    string(2) "ok" 
    ["items"]=> 
    array(20) { 
    [0]=> 
    array(14) { 
     ["can_delete_comments"]=> 
     bool(false) 
     ["code"]=> 
     string(11) "BNK1LCqBPFp" 
     ["location"]=> 
     NULL 
     ["images"]=> 
     array(3) { 
     ["low_resolution"]=> 
     array(3) { 
      ["url"]=> 
      string(181) "https://instagram.fskg1-1.fna.fbcdn.net/t51.2885-15/s320x320/e35/c180.0.720.720/15057412_1332184313482140_6642273356848562176_n.jpg?ig_cache_key=MTM5MDE1NzI5MDIyOTAwMjYwMQ%3D%3D.2.c" 
      ["width"]=> 
      int(320) 
      ["height"]=> 
      int(320) 
     } 
     ["thumbnail"]=> 
     array(3) { 
      ["url"]=> 
      string(181) "https://instagram.fskg1-1.fna.fbcdn.net/t51.2885-15/s150x150/e35/c180.0.720.720/15057412_1332184313482140_6642273356848562176_n.jpg?ig_cache_key=MTM5MDE1NzI5MDIyOTAwMjYwMQ%3D%3D.2.c" 
      ["width"]=> 
      int(150) 
      ["height"]=> 
      int(150) 
     } 
     ["standard_resolution"]=> 
     array(3) { 
      ["url"]=> 
      string(188) "https://instagram.fskg1-1.fna.fbcdn.net/t51.2885-15/s640x640/sh0.08/e35/c180.0.720.720/15057412_1332184313482140_6642273356848562176_n.jpg?ig_cache_key=MTM5MDE1NzI5MDIyOTAwMjYwMQ%3D%3D.2.c" 
      ["width"]=> 
      int(640) 
      ["height"]=> 
      int(640) 
     } 
     } 

ответ

1

Если я правильно понял вашу структуру массива правильно, то вы, вероятно, нужно это:

if (is_array($images)) 
foreach ($images["items"] as $item) 
{ 
    if (is_array($item)) 
    foreach ($item as $img) 
     { 
      if (isset($img["low_resolution"]) && is_array($img["low_resolution"])) 
      { 
       echo $img["low_resolution"]["url"]; 
      } 

     } 
} 
+0

Я пытался что-то похожее на это, но массив low_resolution содержит ширину и значение высоты, и я хочу, чтобы получить ** URL ** его –

+0

По какой-то причине он выдает ошибку ** Недопустимое смещение строки «low_resolution» **, также удаляя '['low_resolution']' из оператора if, эхо-строка вызывает ошибку: ** Неопределенный индекс: low_resolution **. Я действительно не знаю, что вызывает это. –

+0

Это означает, что вы не имеете 'low_resolution' в некоторых элементах вашего массива. Одна секунда. – Phiter

0

Попробуйте

foreach ($images["items"] as $image) 
{ 
    foreach ($image as $img) 
     { 
      echo $img["low_resolution"]["url]; 
     } 
} 
2

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

$your_new_array = array(); // create new empty array to store low_resolution images 

foreach ($images[items] as $image_item) 
{ 
    // for each $images item, add images->low_resolution->url value to $your_new_array 
    $your_new_array[] = $image_item['images']['low_resolution']['url']; 
} 

Для дополнительной безопасности, добавить элемент управления, чтобы избежать ошибок из-за $ изображений без images-> low_resolution-> URL

$your_new_array = array(); // create new empty array to store low_resolution images 

foreach ($images[items] as $image_item) 
{ 
    // for each $images item, if exisit images->low_resolution->url... 
    if (isset($image_item['images']['low_resolution']['url'])) 
    { 
     // ...add images->low_resolution->url value to $your_new_array 
     $your_new_array[] = $image_item['images']['low_resolution']['url']; 
    } 
} 
+0

Этот код работает тоже, но вы забыли добавить ['items'] вместо ['items'] в инструкции foreach. Спасибо за ваш ответ ! –

1

Я предположил, что вы есть структура, как показано ниже:

$data = [ 
    /*(..) Some structure */ 
    'items' => 
     [ 
      'images' => [ 
       [ 
        'low_resolution' => [ 
         'url' => "https://instagram.fskg1-1.fna.fbcdn.net/t51.2885-15/s320x320/e35/c180.0.720.720/15057412_1332184313482140_6642273356848562176_n.jpg?ig_cache_key=MTM5MDE1NzI5MDIyOTAwMjYwMQ%3D%3D.2.c", 
         'width' => 1234, 
         'height' => 122 
        ], 
        'thumbnail' => [ 
         'url' => "https://instagram.fskg1-1.fna.fbcdn.net/t51.2885-15/s320x320/e35/c180.0.720.720/15057412_1332184313482140_6642273356848562176_n.jpg?ig_cache_key=MTM5MDE1NzI5MDIyOTAwMjYwMQ%3D%3D.2.c", 
         'width' => 1234, 
         'height' => 122 
        ] 
       ], 
       [ 
        'low_resolution' => [ 
         'url' => "", //some empty url 
         'width' => 1234, 
         'height' => 122 
        ], 
        'thumbnail' => [ 
         'url' => "https://instagram.fskg1-1.fna.fbcdn.net/t51.2885-15/s320x320/e35/c180.0.720.720/15057412_1332184313482140_6642273356848562176_n.jpg?ig_cache_key=MTM5MDE1NzI5MDIyOTAwMjYwMQ%3D%3D.2.c", 
         'width' => 1234, 
         'height' => 122 
        ] 
       ], 

      ], 

     ] 
    /*(..) Some structure */ 
]; 

Теперь вы можете фильтровать его так:

// array filter skips empty urls or not existing properties 
// array map iterates through the array of images and returns new one with urls only 
$lowResolutionUrls = array_filter(array_map(function ($image) { 

    return (isset($image['low_resolution']) && isset($image['low_resolution']['url'])) 
     ? $image['low_resolution']['url'] 
     : null; 
}, $data['items']['images']), function($url){ 
    return !!$url; 
}); 

результат, как показано ниже:

Array 
(
    [0] => https://instagram.fskg1-1.fna.fbcdn.net/t51.2885-15/s320x320/e35/c180.0.720.720/15057412_1332184313482140_6642273356848562176_n.jpg?ig_cache_key=MTM5MDE1NzI5MDIyOTAwMjYwMQ%3D%3D.2.c 
) 
Смежные вопросы