2011-06-20 12 views
2

私は2つの文字列の間の内容を抽出する関数を持っています。私はhtmlタグの間で特定の情報を抽出するためにそれを使用します。しかし、現在のところ最初のマッチだけを抽出するようになっていますので、すべてのマッチを抽出して配列で提供するように改良することが可能かどうかを知りたいのです。preg_match_all関数と似ています。php、関数の改良の間になる - 配列のサポートを追加する

 
function get_between($content,$start,$end){ 
    $r = explode($start, $content); 
    if (isset($r[1])){ 
     $r = explode($end, $r[1]); 
    return $r[0]; 
    } 
    return ''; 
} 

答えて

2

再帰を伴うバージョン。

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

PHP 5.2以前のバージョンのarray_mapのバージョン。

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

PHP 5.3の場合のarray_mapのバージョン。

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

D: – Michael

+0

私は3つのバージョンを追加しました。 – Michas

関連する問題