0

我有一个像这样的字符串

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

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

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

谢谢

4

3 回答 3

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];
}

说明:每一行都被“-”符号分成两部分(如果更少,那是一个错误 - 该行不包含“-”,因此根本不应该处理)。第一部分被推入$titles数组,第二部分被推入$domains.

于 2012-06-24T00:13:49.413 回答
1

首先将字符串拆分为每一行(按行尾字符)。

然后在第一部分将每行分成两部分-并将这些部分添加到结果中。您可以稍后为每个部分自己命名:

示例/演示

$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/"
}
于 2012-06-24T00:21:32.580 回答
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]);
于 2012-06-24T00:25:41.360 回答