Tricky foreach loop … как?

Я просматриваю таблицу, которая может иметь такую ​​информацию:

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 в два раза выше, чтобы получить нужный мне результат.

Любая помощь была бы с благодарностью (это нужно пропустить через один цикл, поскольку это строка в электронной таблице и имеет другие назначенные ему данные).

Это в основном многопользовательская запись.

благодаря

Основываясь на том, что у вас есть, попробуйте:

 $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 являются ^^

Вы на самом деле довольно близки. Я бы сделал это как таковой:

 $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 />"; } } 

EDIT: вы можете добавить чек для if ($f == $t) , потому что ORL -> ORL на самом деле не имеет смысла. 🙂

  1. Если его таблица будет считаться CSV, если вы можете
  2. почему регулярное выражение? jsut взрывается вкл /

Итак, что-то вроде этого:

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

Попробуй это:

 $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 , и код будет проходить через каждую строку.

 $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

Вы можете использовать вложенный foreach и loop над совпадениями $ 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 />"; } }