将字符串拆分成多个数组?

时间:2012-06-24 00:11:38

标签: php

我有一个像这样的字符串

$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");

所以我可以在脚本中使用它们

我做了很多尝试但失败了:(

由于

3 个答案:

答案 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]);