我有一个像这样的字符串
$sitesinfo = 'site 1 titles-example1.com/
site 2 titles-example2.com/
site 3 titles-example3.com/
site 4 titles-example4.com/
site 5 titles-example5.com/';
我过去常常把这些行分成1个数组
$lines = explode("/",$sitesinfo);
然后在我循环时,我将每一行都放入一个数组对象而没有问题 我需要做的是将每一行分成两部分并将每一部分添加到一个数组中,结果就像这样
$titles = array("site 1 titles","site 2 titles","site 3 titles","site 4 titles","site 5 titles");
$domains = array("example1.com","example2.com","example3.com","example4.com","example5.com");
所以我可以在脚本中使用它们
我做了很多尝试但失败了:(
由于
答案 0 :(得分:2)
这个怎么样:
foreach ($lines as $line) {
$t = explode('-', trim($line), 2);
if (count($t) < 2) {
echo "Failed to parse the line $line";
continue;
}
$titles[] = $t[0];
$domains[] = $t[1];
}
说明:每一行都被&#39; - &#39;分开。符号恰好分为2个部分(如果有的话,那就是错误 - 该行不包含&#39; - &#39;因此不应该在所有)。第一部分被推入$titles
数组,第二部分被推入$domains
。
答案 1 :(得分:1)
首先将字符串分成每一行(按行结束字符)。
然后在第一个-
将每行分成两部分,并将这些部分添加到结果中。您可以稍后为每个部件分配一个名称:
实施例/ Demo:
$lines = explode("\r\n", $sitesinfo);
$r = array(null, null);
foreach($lines as $line) {
list($r[0][], $r[1][]) = explode("-", $line, 2) + array(1 => NULL);
}
list($titles, $domains) = $r;
unset($r);
或正则表达式变体(Demo):
preg_match_all('~([^-]+)-(.*)~', $sitesinfo, $matches);
list(, $titles, $domains) = $matches;
unset($matches);
结果:
array(5) {
[0]=>
string(13) "site 1 titles"
[1]=>
string(13) "site 2 titles"
[2]=>
string(13) "site 3 titles"
[3]=>
string(13) "site 4 titles"
[4]=>
string(13) "site 5 titles"
}
array(5) {
[0]=>
string(13) "example1.com/"
[1]=>
string(13) "example2.com/"
[2]=>
string(13) "example3.com/"
[3]=>
string(13) "example4.com/"
[4]=>
string(13) "example5.com/"
}
答案 2 :(得分:1)
正则表达式替代方案:
$sitesinfo = 'site 1 titles-example1.com/
site 2 titles-example2.com/
site 3 titles-example3.com/
site 4 titles-example4.com/
site 5 titles-example5.com/';
preg_match_all('~([^-]+)-(.*)~',$sitesinfo,$matches);
$titles = array_map('trim',$matches[1]);
$domains = array_map('trim',$matches[2]);