2015-04-29 1 views
1

Я ассоциативный массив под названием $allFeeds (после выполнения print_r($allFeeds);) следующим образом:Почему логика для преобразования массивов и разбора HTML не работает в следующем сценарии?

Примечание: Фактическая ассоциативный массив $allFeeds очень велик. Для понимания цели я только поместил один элемент из этого большого массива.

Array 
    (
     [0] => Array 
     (
     [feed_image] => Array 
     (
      [0] => <a href="http://52.1.47.143/photo/928/2_onclick_ok/userid_244/" class=" js_photo_item_928 photo_holder_image" rel="928" ><img src="http://52.1.47.143/file/pic/photo/2015/04/9bd387c6442135834298d6a17b3f9555_240.jpg" alt="" width="180" height="160" class="photo_holder" /></a><br /> 
      [1] => <a href="http://52.1.47.143/photo/927/8/userid_244/" class=" js_photo_item_928 photo_holder_image" rel="927"><img src="http://52.1.47.143/file/pic/photo/2015/04/6eb60ee0e258223ef72a9a632d0ce429_240.png" alt="" height="84" width="150" class="photo_holder" userid="244" /></a> 
     ) 
    ) 
    ) 

Прежде всего я хочу, чтобы проверить, является ли ключ ['feed_image'] присутствует во внутреннем массиве ассоциативных массива $ allFeeds. Если он присутствует преобразовать массив $allFeeds[$key]['feed_image'], изменяя путь изображений каждого элемента массива следующим образом:

Примечание: Я хочу, чтобы создать новый массив из значения атрибута «Src» в каждой метке. Вы можете наблюдать и в этом случае.

Array 
    (
     [0] => Array 
     (
     [feed_image] => Array 
     (
      [0] => 2015/04/9bd387c6442135834298d6a17b3f9555%s.jpg 
      [1] => 2015/04/2015/04/6eb60ee0e258223ef72a9a632d0ce429%s.png 
     ) 
    ) 
    ) 

Я пробовал следующий код, но для меня это не сработало. Я не понимаю, какую ошибку я делаю. Было бы здорово, если бы кто-нибудь помог мне исправить мою ошибку и получить желаемый результат.

$cnt = 0; 
foreach($allFeeds as $key => $value) { 
    if(isset($allFeeds[$cnt]['feed_image']) && is_array($allFeeds[$cnt]['feed_image'])) { 
    $allFeeds[$cnt]['feed_image'][$key] = array_map(function($item) { 
     $dom = new DOMDocument; 
     $dom->loadHtml($item); 
     $src = simplexml_import_dom($dom)->xpath('//img/@src'); 
     if(!isset($src[0])) { 
     return false; 
     } 
     $components = explode('photo/', $src[0]);    
     return end($components);   
    }, $feed['feed_image']); 
    $allFeeds[$cnt]['feed_image'][$key] = array_filter($allFeeds[$cnt]['feed_image'][$key]); 
    } 
    $cnt++; 
} 

Может ли кто-нибудь помочь мне, предоставив надежное и эффективное решение проблемы, с которой я столкнулся?

Заранее спасибо.

ответ

1

У вас есть некоторые небольшие ошибки в коде, см корректировки ниже:

$allFeeds = Array 
(
    0 => Array 
    (
     'feed_image' => Array 
     (
      0 => '<a href="http://52.1.47.143/photo/928/2_onclick_ok/userid_244/" class=" js_photo_item_928 photo_holder_image" rel="928" ><img src="http://52.1.47.143/file/pic/photo/2015/04/9bd387c6442135834298d6a17b3f9555_240.jpg" alt="" width="180" height="160" class="photo_holder" /></a><br />', 
      1 => '<a href="http://52.1.47.143/photo/927/8/userid_244/" class=" js_photo_item_928 photo_holder_image" rel="927"><img src="http://52.1.47.143/file/pic/photo/2015/04/6eb60ee0e258223ef72a9a632d0ce429_240.png" alt="" height="84" width="150" class="photo_holder" userid="244" /></a>', 
      2 => 'No image, should be removed', 
     ) 
    ) 
); 

$cnt = 0; 
foreach($allFeeds as $key => $value) { 
    if(isset($allFeeds[$cnt]['feed_image']) && is_array($allFeeds[$cnt]['feed_image'])) { 
    // $allFeeds[$cnt]['feed_image'][$key] = array_map(function($item) { 
    $allFeeds[$cnt]['feed_image'] = array_map(function($item) { 
     $dom = new DOMDocument; 
     $dom->loadHtml($item); 
     $src = simplexml_import_dom($dom)->xpath('//img/@src'); 
     if(!isset($src[0])) { 
     return false; 
     } 
     $components = explode('photo/', $src[0]); 
     return end($components); 
     // }, $feed['feed_image']); 
     }, $allFeeds[$cnt]['feed_image']); 

     // $allFeeds[$cnt]['feed_image'][$key] = array_filter($allFeeds[$cnt]['feed_image'][$key]); 
     $allFeeds[$cnt]['feed_image'] = array_filter($allFeeds[$cnt]['feed_image']); 
    } 
    $cnt++; 
} 

print_r($allFeeds); 

Выход:

Array 
(
    [0] => Array 
     (
      [feed_image] => Array 
       (
        [0] => 2015/04/9bd387c6442135834298d6a17b3f9555_240.jpg 
        [1] => 2015/04/6eb60ee0e258223ef72a9a632d0ce429_240.png 
       ) 

     ) 

) 
+0

Side Примечание: Если у вас нет особых причин не делать этого, вы могли бы удалите переменную '$ cnt' и замените все ее появления на' $ key'. – mhall