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

次に、ループ中に各行を問題なく配列オブジェクトに取得しました。各行を2つの部分に分割し、各部分を配列に追加して、結果が次のようになるようにするために必要なこと

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

説明: 各行は '-' 記号で正確に 2 つの部分に分割されます (少ない場合はエラーです - 行には '-' が含まれていないため、まったく処理されません)。最初の部分は$titles配列にプッシュされ、2 番目の部分は にプッシュされ$domainsます。

于 2012-06-24T00:13:49.413 に答える
1

まず、文字列を各行に (行末文字で) 分割します。

次に、最初に各行を 2 つの部分に分割し、-それらの部分を結果に追加します。後で各パーツに独自の名前を付けることができます。

例/デモ:

$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 に答える