-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 wrong。它不返回修改后的数组。它返回数组中元素的新数量,因此在每次迭代中,您都会丢弃曾经是具有 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 回答