2

2 つの文字列の間のコンテンツを抽出する関数があります。html タグ間の特定の情報を抽出するために使用します。ただし、現在は最初の一致のみを抽出するように機能しているため、すべての一致を抽出して配列で提供するように改善できるかどうかを知りたい.. preg_match_all 関数と同様.

function get_between($content,$start,$end){
    $r = 爆発 ($start, $content);
    if (isset($r[1])){
        $r = 爆発($end, $r[1]);
   $r[0] を返します。
    }
    戻る '';
}
4

1 に答える 1

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();
    }
}
于 2011-06-20T12:21:04.753 に答える