php, получить между улучшением функции – добавить поддержку массива

У меня есть функция, которая извлекает содержимое между двумя строками. Я использую его для извлечения конкретной информации между тэгами html. Однако в настоящее время он работает, чтобы извлечь только первое совпадение, поэтому я хотел бы знать, можно ли улучшить его таким образом, чтобы извлечь все совпадения и предоставить их в массиве. Аналогично функции preg_match_all.

 функция get_between ($ content, $ start, $ end) {
     $ r = explode ($ start, $ content);
     if (isset ($ r [1])) {
         $ r = explode ($ end, $ r [1]);
    return $ r [0];
     }
     вернуть '';
 }

Версия с рекурсией.

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(); } }