php, доберитесь до улучшения функций - добавьте поддержку массивов
У меня есть функция, которая извлекает содержимое между 2 строками. Я использую его для извлечения определенной информации между html-тегами. Однако в настоящее время он работает для извлечения только первого совпадения, поэтому я хотел бы знать, можно ли улучшить его таким образом, чтобы извлечь все совпадения и предоставить их в массиве.. аналогично функции preg_match_all.
function get_between($content,$start,$end){ $r = explode($start, $content); if (isset($r[1])){ $r = explode($end, $r[1]); return $r[0]; } return ''; }
2
1 answers
Версия с рекурсией.
function get_between($content,$start,$end,$rest = array()){
$r = explode($start, $content, 2);
if (isset($r[1])){
$r = explode($end, $r[1], 2);
$rest[] = $r[0];
return get_between($r[1],$start,$end,$rest);
} else {
return $rest;
}
}
Версия с циклом.
function get_between($content,$start,$end){
$r = explode($start, $content);
if (isset($r[1])){
array_shift($r);
$ret = array();
foreach ($r as $one) {
$one = explode($end,$one);
$ret[] = $one[0];
}
return $ret;
} else {
return array();
}
}
Версия с array_map для PHP 5.2 и более ранних версий.
function get_between_help($end,$r){
$r = explode($end,$r);
return $r[0];
}
function get_between($content,$start,$end){
$r = explode($start, $content);
if (isset($r[1])){
array_shift($r);
$end = array_fill(0,count($r),$end);
$r = array_map('get_between_help',$end,$r);
return $r;
} else {
return array();
}
}
Версия с array_map для PHP 5.3.
function get_between($content,$start,$end){
$r = explode($start, $content);
if (isset($r[1])){
array_shift($r);
$help_fun = function($arr) use ($end) {
$r = explode($end,$arr);
return $r[0];
};
$r = array_map($help_fun,$r);
return $r;
} else {
return array();
}
}
2
Author: Michas, 2011-06-20 12:58:00