Php 将阵列炸三次

Php 将阵列炸三次,php,arrays,pattern-matching,explode,Php,Arrays,Pattern Matching,Explode,我有一根弦,我想用三种不同的模式来爆炸。字符串看起来像: country:00/00/00->link:00/00/00->link2 country2:00/00/00->link3:00/00/00->link4 我想得到这两个字符串的不同部分。这两行用/n分隔,日期用分隔:与日期关联的链接用->分隔 开始时,我因断线而爆炸 $var = explode("\n", $var); 但当我试图再次分解这个字符串时,我得到了一个错误:*preg_split()期望参数

我有一根弦,我想用三种不同的模式来爆炸。字符串看起来像:

country:00/00/00->link:00/00/00->link2
country2:00/00/00->link3:00/00/00->link4
我想得到这两个字符串的不同部分。这两行用/n分隔,日期用分隔:与日期关联的链接用->分隔

开始时,我因断线而爆炸

$var = explode("\n", $var);
但当我试图再次分解这个字符串时,我得到了一个错误:*preg_split()期望参数2是字符串,数组给定*

我怎样才能得到不同的零件

提前谢谢。

<> >代替使用<代码> PrggSpule,考虑使用<代码> PrggMatals<代码>。你可以把它写成一个大正则表达式


输出:

Array
(
    [0] => country:00/00/00->link:00/00/00->link2
    [1] => country
    [2] => 00/00/00
    [3] => link
    [4] => 00/00/00
    [5] => link2
)
Array
(
    [0] => country2:00/00/00->link3:00/00/00->link4
    [1] => country2
    [2] => 00/00/00
    [3] => link3
    [4] => 00/00/00
    [5] => link4
)
编辑

在你的评论中,你发布的日期是4位数字,而在你的问题中,它们只有2位数字

因此,您需要将正则表达式更改为:


/^(\w+):(\d\d\/\d\d\/\d\d\d)->(\w+):(\d\d\/\d\d\d\d)->(\w+)/

使用
预匹配如何

<?php
    $data =<<<ENDDATA
country:00/00/00->link:00/00/00->link2
country2:00/00/00->link3:00/00/00->link4
ENDDATA;

    preg_match_all('#(\d{2}/\d{2}/\d{2})->(.[^:\n]+)#', $data, $matches);

    print_r($matches);

您的问题是,在第一次使用explode后,它将变成一个数组,而explode函数connat explode a array。您需要使用一个针对数组元素的循环probablr,然后在这些元素上使用explode函数,您将拥有它。 见下例:

<?php
$val="abc~~~def~~~ghi@@@@jkl~~~mno~~~pqr@@@stu~~~vwx~~~yz1";
$val=explode("@@@@", $val);
//result will be
$valWillBe=array(3) {
[0]=>'abc~~~def~~~ghi',
[1]=>'jkl~~~mno~~~pqr',
[2]=>'stu~~~vwx~~~yz1'
}

//if you want to explode again you use a loop
for($r=0; $r<sizeof($val); $r++){
$val[$r]=explode("~~~", $val[$r]);
}
//now you have your string exploded all in places.

?>


由于您似乎没有使用
preg\u split()
如何获得此错误?
explode
返回一个数组。在将其输入到
preg\u split
@johncode Ooops之前,您必须使用
join
,没错,我也尝试过preg\u split$var=explode(“\n”,$var)$var2=预分割(“/:/”,$var);它返回这个错误。@remyabel在这种情况下我应该加入数组的哪一部分?当我使用你的字符串时,它工作得很好,但是当我添加变量时,$matches变量中没有任何内容。在不执行任何操作之前:
string(82)“Paris:10/10/1000->link:10/10/1000->link Londres:10/10/2000->link:20/2000->link”
第一次拆分后:
array(2){[0]=>string(40)“Paris:10/10/1000->link:10/10/1000->link”[1]=>string(41)“Londres:10/10/2000->link:20/20/2000->link”
最后没有什么了:
array(0){}array(0){/code>是的,这是肯定的,我没有注意到。无论如何,非常感谢。还有一个问题,当我退出for循环时,它只返回一个数组,而不是两个,为什么?@Jeremdsgn
preg_match
修改
$matches
。您需要将它们存储在一个单独的数组中。如何选择日期部分?因为当我只放一个日期/链接时,它就不起作用了。如果我愿意,我可以添加更多的日期/链接,而不仅仅是两个。提前谢谢。
<?php
$val="abc~~~def~~~ghi@@@@jkl~~~mno~~~pqr@@@stu~~~vwx~~~yz1";
$val=explode("@@@@", $val);
//result will be
$valWillBe=array(3) {
[0]=>'abc~~~def~~~ghi',
[1]=>'jkl~~~mno~~~pqr',
[2]=>'stu~~~vwx~~~yz1'
}

//if you want to explode again you use a loop
for($r=0; $r<sizeof($val); $r++){
$val[$r]=explode("~~~", $val[$r]);
}
//now you have your string exploded all in places.

?>