数据未被正确分析

时间:2013-11-11 17:14:51

标签: php string parsing

我有一个简单的数据格式如下:

stuff/stuff/stuff

一个例子是:

data/test/hello/hello2

为了检索某个数据,可以使用我的解析器,它会尝试执行以下操作:

data/test/hello/hello2

您想要检索data/test下的数据(hello)。我的解析器代码如下:

function getData($data, $pattern)
{
    $info = false;

    $dataLineArray = explode("\n", $data);

    foreach($dataLineArray as &$line)
    {
        if (strpos($line,$pattern) !== false) {

            $lineArray = explode("/", $line);
            $patternArray = explode("/", $pattern);

            $iteration = 0;


            foreach($lineArray as &$lineData)
            {
                if($patternArray[$iteration] == $lineData)
                {
                    $iteration++;
                }
                else
                {
                    $info = $lineData;
                }
            }


        }
    }

    return $info;
}

但是,似乎总是会返回最后一项,在本例中为hello2

echo getData("data/test/hello/hello2", "data/test");

给我;

hello2

我做错了什么?

1 个答案:

答案 0 :(得分:1)

如果你想要模式之后的第一个元素,请将break放在循环中:

        foreach($lineArray as $lineData)
        {
            if($patternArray[$iteration] == $lineData)
            {
                $iteration++;
            }
            elseif ($iteration == count($patternArray))
            {
                $info = $lineData;
                break;
            }
        }

我也检查$iteration == count($patternArray),以便它不会返回中间元素,例如

/data/foo/test/hello/hello2

将返回hello而不是foo

P.S。似乎没有任何理由在循环中使用引用而不是普通变量,因为您从不分配给引用变量。