Как получить URL изображения из тега img, который присутствует в качестве значения ключа в ассоциативном массиве?

У меня есть ассоциативный массив под названием $data следующее :

Array
(
[0] => Array
(
[item_id] => 170
[item_title] => Master of Engineering
[item_time_stamp] => 1421152531
[item_user_id] => 244
[item_type_id] => pages
[item_photo] => 169
[profile_image] => <img src="http://54.174.50.242/theme/frontend/foxplus/style/default/image/pages/category_169.jpg"  alt=""  width="50"  height="50" />
)
[1] => Array
(
[item_id] => 169
[item_title] => SF
[item_time_stamp] => 1421063963
[item_user_id] => 901
[item_type_id] => pages
[profile_image] => <img src="http://54.174.50.242/theme/frontend/foxplus/style/default/image/pages/category_169.jpg"  alt=""  width="50"  height="50" />
)
)

Теперь я хочу получить только URL изображения в ключе [profile_image], Конечный результирующий массив должен выглядеть следующим образом:

Array
(
[0] => Array
(
[item_id] => 170
[item_title] => Master of Engineering
[item_time_stamp] => 1421152531
[item_user_id] => 244
[item_type_id] => pages
[item_photo] => 169
[profile_image] => http://54.174.50.242/theme/frontend/foxplus/style/default/image/pages/category_169.jpg
)
[1] => Array
(
[item_id] => 169
[item_title] => SF
[item_time_stamp] => 1421063963
[item_user_id] => 901
[item_type_id] => pages
[profile_image] => http://54.174.50.242/theme/frontend/foxplus/style/default/image/pages/category_169.jpg
)
)

Как я должен получить это? Пожалуйста, помогите мне.

0

Решение

попробуйте что-то вроде этого:

//to test
$data = array(
array(
'profile_image'=>'<img src="http://54.174.50.242/theme/frontend/foxplus/style/default/image/pages/category_169.jpg"  alt=""  width="50"  height="50" />'
),
array(
'profile_image'=>'<img src="http://54.174.50.242/theme/frontend/foxplus/style/default/image/pages/category_169.jpg"  alt=""  width="50"  height="50" />'
)
);

function fixdata($data){
$fix = function($url){
$patt = "/h\S*.jpg|.gif|.png/";
preg_match($patt,$url,$match);
return (empty($match[0]))?$url:$match[0];
};
foreach($data as $key=>$value){
$data[$key]['profile_image'] = $fix($value['profile_image']);
}
return $data;
}
var_dump($data);
$newdata = fixdata($data);
var_dump($newdata);
1

Другие решения

попробуйте это, это немного дерьмо, но это работает нормально

for ($i = 0; isset($data[$i]); $i++){
$temp = explode("\"", $data[$i]['profile_image']);
$data[$i]['profile_image'] = $temp[1];
}
1

Приведенный ниже код создаст новый массив и позволит вам извлечь содержимое любого значения из одного из вложенных массивов. То, что я написал, будет работать для случая, когда ваши теги img всегда имеют одинаковый формат, однако, если вы столкнетесь с ситуацией, когда у вас есть разные форматы, вы можете изменить область, в которой код очищает тег, чтобы перестроить URL с помощью минимальные усилия

$mainArray = array(

array(
'item_id'           => 170,
'item_title'        => 'Master of Engineering',
'item_time_stamp'   => 1421152531,
'item_user_id'      => 244,
'item_type_id'      => 'pages',
'item_photo'        => 169,
'profile_image'     => '<img src="http://54.174.50.242/theme/frontend/foxplus/style/default/image/pages/category_169.jpg"  alt=""  width="50"  height="50" />'
),
array(
'item_id'           => 169,
'item_title'        => 'SF',
'item_time_stamp'   => 1421063963,
'item_user_id'      => 901,
'item_type_id'      => 'pages',
'item_photo'        => 169,
'profile_image'     => '<img src="http://54.174.50.242/theme/frontend/foxplus/style/default/image/pages/category_169.jpg"  alt=""  width="50"  height="50" />'
)

);$newArray = array();
foreach($mainArray as $innerArray){$newInnerArray = array();
foreach($innerArray as $key => $val){

if($key !== 'profile_image'){

$newInnerArray[$key] = $val;

} else {

//Scrape the url here
$link = strstr($val, '"');
$link = strstr($link, ' alt', TRUE);
$link = str_replace('"', '', $link);
$link = str_replace(' ', '', $link);

$newInnerArray[$key] = $link;

}

}

$newArray[] = $newInnerArray;

}

echo '<pre>';

echo var_export($newArray, TRUE);
0

используйте класс DOCDocument:

foreach ($data as &$item) {
$doc = new DOMDocument();
$doc->loadXML($item["profile_image"]);
$item["profile_image"] = $doc->documentElement->getAttribute("src");
}

таким образом, вы не зависите от подробного формата вашей строки IMG, например, где находится ваш атрибут src.

0
По вопросам рекламы [email protected]