Php 棘手的foreach循环。。。如何?

Php 棘手的foreach循环。。。如何?,php,Php,我正在循环浏览一份电子表格,其中可能包含以下信息: 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

我正在循环浏览一份电子表格,其中可能包含以下信息:

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
}
$row=“LAX/SAF/ORL”;
$row2=“ORL/SFO”;
preg_match_all(“([A-Za-z]+)”,$row,$matches);
foreach($将[0]匹配为$location\u to){
将$location_回送到“->”$row2。“
”;//当前不在第2行中循环 }
如果没有这两组数据,我怎么做?我现在被困在如何。。foreach两次,像上面那样,以获得我需要的输出

任何帮助都将不胜感激(这需要运行一个循环,因为它是电子表格上的一行,并且有其他指定的数据)

这基本上是一种多行程进入的方式

谢谢

  • 如果它的电子表格是CSV格式的,请尽可能将其读为CSV格式
  • 为什么是正则表达式?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";
       }  
    }
    
  • 如果它的电子表格是CSV格式的,请尽可能将其读为CSV格式
  • 为什么是正则表达式?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";
       }  
    }
    

    可以在$row2匹配项上使用嵌套的foreach和循环,如下所示:

    $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 />";
      }
    }
    
    $row=“LAX/SAF/ORL”;
    $row2=“ORL/SFO”;
    $to_locations=分解(“/”,$row);
    $from_locations=分解(“/”,$row2);
    foreach($to_地点为$to){
    foreach($from_位置作为$from){
    将$to.->“$from.
    ”; } }
    您可以在$row2匹配上使用嵌套的foreach和循环,如下所示:

    $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 />";
      }
    }
    
    $row=“LAX/SAF/ORL”;
    $row2=“ORL/SFO”;
    $to_locations=分解(“/”,$row);
    $from_locations=分解(“/”,$row2);
    foreach($to_地点为$to){
    foreach($from_位置作为$from){
    将$to.->“$from.
    ”; } }
    事实上,你已经非常接近了。我会这样做:

    $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 />";
        }
    }
    
    $row=“LAX/SAF/ORL”;
    $row2=“ORL/SFO”;
    $from=分解(“/”,$row);
    $to=分解(“/”,$row2);
    foreach(从$f起){
    foreach($to as$t){
    回声$f.->“$t.
    ”; } }

    编辑:如果($f==$t),您可能需要添加一个检查
    ,因为ORL->ORL实际上没有意义。:)

    事实上你已经很接近了。我会这样做:

    $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 />";
        }
    }
    
    $row=“LAX/SAF/ORL”;
    $row2=“ORL/SFO”;
    $from=分解(“/”,$row);
    $to=分解(“/”,$row2);
    foreach(从$f起){
    foreach($to as$t){
    回声$f.->“$t.
    ”; } }

    编辑:如果($f==$t)
    ,您可能需要添加一个检查
    ,因为ORL->ORL实际上没有意义。:)

    根据您所拥有的,尝试:

    $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=“LAX/SAF/ORL”;
    $row2=“ORL/SFO”;
    $arow=分解(“/”,$row);
    $arow2=分解(“/”,$row2);
    foreach($p1左右){
    foreach(约2美元为p2美元){
    回声“$p1->$p2
    ”; } }

    这将创建您要查找的输出类型,因为您已经知道
    $row
    $row2
    是什么^^

    基于您所拥有的,请尝试:

    $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=“LAX/SAF/ORL”;
    $row2=“ORL/SFO”;
    $arow=分解(“/”,$row);
    $arow2=分解(“/”,$row2);
    foreach($p1左右){
    foreach(约2美元为p2美元){
    回声“$p1->$p2
    ”; } }
    这将创建您要查找的输出类型,因为您已经知道
    $row
    $row2
    是什么^^

    请尝试以下操作:

    $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
        }
    }
    
    $row=“LAX/SAF/ORL”;
    $row2=“ORL/SFO”;
    $rows=数组($row,$row2);
    foreach($行作为$行){
    preg_match_all(“([A-Za-z]+)”,$row,$matches);
    foreach($将[0]匹配为$location\u to){
    将$location_回送到“->”$row2。“
    ”;//当前不在第2行中循环 } }
    基本上,您拥有的代码将为
    $rows
    数组中的每个元素执行

    将来,如果您有更多行(即文件的每一行),只需将它们添加到
    $rows
    数组中,代码将在每一行中循环。

    尝试以下操作:

    $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
        }
    }
    
    $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;
      }
    }
    
    $row=“LAX/SAF/ORL”;
    $row2=“ORL/SFO”;
    $rows=数组($row,$row2);
    foreach($行作为$行){
    preg_match_all(“([A-Za-z]+)”,$row,$matches);
    foreach($将[0]匹配为$location\u to){
    将$location_回送到“->”$row2。“
    ”;//当前不在第2行中循环 } }
    基本上,您拥有的代码将为
    $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的数组


    如果您愿意,这将导致您拥有一个关联的数组,或者一个字符串格式为LAX->ORL

    的数组,不要为此使用
    preg\u match
    。这是完全没有效率的。我建立在问题中的代码上,你应该发表你对问题的评论,而不是相反。确实,你建立在问题中的代码上,但你只是“让它工作”,而不是改进它。虽然这个评论也属于这个问题,但使用相同方法的每个答案都应该得到相同的评论我同意你的看法,事实上,我对你的答案投了赞成票。不要用
    preg\u match
    来回答这个问题。这是完全没有效率的。我建立在问题中的代码上,你应该发表你对问题的评论,而不是相反。确实,你建立在问题中的代码上,但你只是“让它工作”,而不是改进它。虽然这个评论也属于这个问题,但使用相同方法的每个答案都应该得到相同的评论我同意你的看法,事实上我是在给你的答案投票我只是照抄了OP的内容。我现在正在努力改进。今晚有人对落选感到有点兴奋。。我投了两颗子弹,保存了,然后开始编辑代码示例,当我再次保存时,我投了反对票。我实际上只是复制了OP的内容。我在工作