0

次のような情報が含まれている可能性のあるスプレッドシートをループしています。

To                  From
LAX/SAF/ORL         ORL/SAF
LAX/DUB             DUB/SAF
SAF/LON             LON/BNE/SYD

この情報をループする必要があるため、次のようになります。

Result 1: Lax -> Orl
Result 2: Lax -> Saf
Result 3: Saf -> Orl
Result 4: Saf -> Saf
Result 5: Orl -> Orl
Result 6: Orl -> Saf

これが私がこれまでに持っているものです:

$row = "LAX/SAF/ORL";
$row2 = "ORL/SFO";
preg_match_all('([A-Za-z]+)', $row, $matches);
foreach ($matches[0] as $location_to){
    echo $location_to . " -> " . $row2 . "<br />"; //currently doesn't loop through row2
}

どうすればこれを行うことができますが、両方のデータセットに対してですか? 私は現在、必要な出力を得るために、上記のように foreach を 2 回実行する方法に行き詰まっています。

どんな助けでも大歓迎です(これはスプレッドシートの行であり、他のデータが割り当てられているため、1つのループを実行する必要があります)。

それは基本的にマルチトリップエントリーのようなものです。

ありがとう

4

6 に答える 6

3

あなたが持っているものに基づいて、試してください:

$row = "LAX/SAF/ORL";
$row2 = "ORL/SFO";
$arow = explode("/", $row);
$arow2 = explode("/", $row2);
foreach($arow as $p1) {
    foreach($arow2 as $p2) {
        echo "$p1 -> $p2 <br>";
    }
}

$rowそして、あなたはすでに何が何であるかを知っているので、それはあなたが探している出力のタイプを作成します$row2^^

于 2013-02-25T01:12:39.323 に答える
1

あなたは実際にはかなり近いです。私はそのようにします:

$row = "LAX/SAF/ORL";
$row2 = "ORL/SFO";
$from = explode('/', $row);
$to   = explode('/', $row2);

foreach ($from as $f){
    foreach($to as $t) {
        echo $f . " -> " . $t . "<br />";
    }
}

編集: if ($f == $t)ORL -> ORL は実際には意味がないため、 のチェックを追加することをお勧めします。:)

于 2013-02-25T01:12:34.547 に答える
1
  1. そのスプレッドシートが可能であればCSVとして読み取る場合
  2. なぜ正規表現?爆発する/

それで、次のようなもの:

$file = fopen('/path/to/file.csv', 'r');
// skip headers
fseek($file, 1);

while($row = fgetcsv($file)) {
   $from = explode('/', $row[0]);
   $to = explode('/', $row[1]);

   foreach($from as $i => $sender) {
      $recipient = isset($to[$i]) ? $to[$i] : 'undefined';
      echo "$sender -> $recipient";
   }  
}
于 2013-02-25T01:06:44.890 に答える
0

次のように、ネストされた foreach を使用して $row2 の一致をループできます。

$row = "LAX/SAF/ORL";
$row2 = "ORL/SFO";
$to_locations = explode('/', $row);
$from_locations = explode('/', $row2);
foreach ($to_locations as $to){
  foreach ($from_locations as $from) {
    echo $to . " -> " . $from . "<br />";
  }
}
于 2013-02-25T01:12:20.257 に答える
0

これを試して:

$row = "LAX/SAF/ORL";
$row2 = "ORL/SFO";

$rows = array($row, $row2);

foreach ($rows as $row) {
    preg_match_all('([A-Za-z]+)', $row, $matches);
    foreach ($matches[0] as $location_to){
        echo $location_to . " -> " . $row2 . "<br />"; //currently doesn't loop through row2
    }
}

基本的に、コードは配列内の各要素に対して実行されます$rows

将来、さらに行 (つまり、ファイルの各行) があれば、それらを$rows配列に追加するだけで、コードは各行をループします。

于 2013-02-25T01:13:26.443 に答える
0
$row = "LAX/SAF/ORL";
$row2 = "ORL/SFO";
$first_array = explode('/', $row);
$second_array = explode('/', $row2);
$result_array = array();
$assoc_array = array();
foreach($first_array as $value1) {
  foreach($second_array as $value2) {
    $assoc_array[$value1] = $value2;
    $result_array[] = $value1.' -> '.$value2;
  }
}

そして、これにより、必要に応じて関連付けられた配列、または LAX -> ORL の形式の文字列を持つ配列のいずれかが作成されます。

于 2013-02-25T01:13:58.620 に答える