-2

位置の配列を返すのに問題があります:

function returnPosition($string,$start){ 
     preg_match('/' . preg_quote($start, '/').'/im', $string, $m, PREG_OFFSET_CAPTURE);

    $startArr = array();

    foreach ($m as $value)
    {
        $startArr = array_push($startArr, $m);
    }
    //var_dump($startArr);
    return $startArr;
}

ありがとう

4

2 に答える 2

2

当然のことながら、 array_pushを間違って使用しています。変更された配列は返されません。配列内の新しい要素数を返すため、反復ごとに、intを含む配列であったものを破棄しています。試す

$startArr[] = $m;

または少なくともただ

array_push($startArr, $m);

割り当てはまったくありません。

于 2012-12-11T21:19:51.463 に答える
0

私のために働くものを見つけました:

function getTagPositions($strBody, $start, $end)
{
    preg_match_all('/' . preg_quote($start, '/') . '([\w\s.]*?)'. preg_quote($end, '/').'/im', $strBody, $strTag, PREG_PATTERN_ORDER);
    $intOffset = 0;
    $intIndex = 0;
    $intTagPositions = array();

    foreach($strTag[0] as $strFullTag) {
        $intTagPositions[$intIndex] = array('start' => (strpos($strBody, $strFullTag, $intOffset)), 'end' => (strpos($strBody, $strFullTag, $intOffset) + strlen($strFullTag)));
        $intOffset += strlen($strFullTag);
        $intIndex++;
    }
    return $intTagPositions;
}


$intTagPositions = getTagPositions("hello there hello hello","he","lo");
// returns
Array ( [0] => Array ( [start] => 0 [end] => 5 ) [1] => Array ( [start] => 7 [end] => 17 ) [2] => Array ( [start] => 18 [end] => 23 ) ) 
于 2012-12-12T18:07:35.887 に答える