Я ассоциативный массив под названием $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++;
}
Может ли кто-нибудь помочь мне, предоставив надежное и эффективное решение проблемы, с которой я столкнулся?
Заранее спасибо.
Side Примечание: Если у вас нет особых причин не делать этого, вы могли бы удалите переменную '$ cnt' и замените все ее появления на' $ key'. – mhall