使用PHP中的标记将字符串存储到数组

时间:2013-04-26 01:30:26

标签: php string

需要帮助。如何使用标签将字符串拆分为数组?

输入:

<aa> test1 </aa> test2 <aa> test3 </aa> test4 ....

输出:

arr[0] = <aa> test1 </aa>;
arr[1] = test2;
arr[2] = <aa> test3 </aa>;
arr[3] = test4;

提前致谢!

2 个答案:

答案 0 :(得分:4)

使用半狡猾的正则表达式的超强力量!

$string = "<aa> test1 </aa> test2 <aa> test3 </aa> test4";
$arr = preg_split('/(<[0-9a-zA-Z_]+>[^<]*<\/[0-9a-zA-Z_]+>)/', $string, NULL, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);

答案 1 :(得分:0)

使用explode

可以实现

我早些时候回答了这个问题,但是由于某些人认为不可能这样做,所以它得到了投票,这是可能的。你只需要构建自己的数组,但首先要做的事情。

首先,我们提到了你提到的这个字符串:

$string = "<aa> test1 </aa> test2 <aa> test3 </aa> test4";

现在我们可以爆炸了:

$e = explode(' ', $string);

我们有一个包含所有分割的数组$ e,可以得到如下结果:

echo $e[0]. $e[1]. $e[2]. "<br>";
echo $e[3]. "<br>";
echo $e[4]. $e[5]. $e[6]. "<br>";
echo $e[7]. "<br>";

输出结果为:

<aa> test1 </aa>;
test2;
<aa> test3 </aa>;
test4;

但这很麻烦,可以理解。但是,可以遍历数组并构建一个您想要的单个数组:

$result = array();
for($i = 0; $i < sizeof($e) ; $i++)
{
    if($i % 2 == 0)
    {
        $tempRes = $e[$i]. $e[$i+1]. $e[$i+2];
    }
    else
    {
        $tempRes = $e[$i+2];
        $i+=2;
    }
    array_push($result, $tempRes);
}

输出相同。

这可能不是最好的方法,但它有效。