Я просматриваю таблицу, которая может иметь такую информацию:
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 на самом деле не имеет смысла. 🙂
/
Итак, что-то вроде этого:
$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 />"; } }