【问题标题】:A PHP for loop isn't displaying content from a filePHP for 循环不显示文件中的内容
【发布时间】:2017-06-22 20:51:10
【问题描述】:

我有一个脚本,它应该从存储在服务器上的文本文件中输出某些参数。这是我的源代码(对格式感到抱歉):

<?php
  $traw = file_get_contents("path/to/transactions.file");
  $lns = explode("\n",$traw);
  $mode['t'] = false;
  $mode['c'] = false;
  $mode['f'] = false;
  # $t = array();
  # $f = array();
  $fs=0;
  $ts=0;
  for($i=0;$i<count($lns);$i++){
      $ln = $lns[0];
      if($ln=="==START TRANSACTION DATA=="){$mode['t']=true;}
      elseif($ln=="=START CLIENT INFO="){$mode['c']=true;}
      elseif($ln=="=END CLIENT INFO="){$mode['c']=false;}
      elseif($ln=="==END TRANSACTION DATA=="){$mode['t']=false;$ts++;}
      elseif($ln=="==START FAILED TRANSACTION=="){$mode['f']=true;}
      elseif($ln=="==END FAILED TRANSACTION=="){$mode['f']=false;$fs++;}
      else{
          if($mode['t'] && $mode['c']){
              $kv = explode(": ",$ln);
              $t[$ts]['client'][strtolower($kv[0])] = $kv[1]; // set key to value in client data
          }
          elseif($mode['t'] && !$mode['c']){
              $kv = explode(": ",$ln);
              $t[$ts]['p'][strtolower($kv[0])] = $kv[1]; // set key to value in purchase data
          }
          elseif($mode['f']){
              $kv = explode(": ",$ln);
              $f[$fs][strtolower($kv[0])] = $kv[1]; // set key to value in failed data
          }
          else{
              continue; // This line means nothing, and is most likely blank
          }
      }
  }
  for($i=0;$i<count($t);$i++){
      $d = $t[$i];
      echo '<tr>';
      echo '<td>'.$d['photo id'].'</td>';
      echo '<td>'.$d['print'].'</td>';
      echo '<td>'.$d['quantity'].'</td>';
      echo '<td>'.$d['price'].'</td>';
      echo '<td>'.$d['date'].'</td>';
      echo '<td>'.$d['additional info'].'</td>';
      echo '<td><button type="button" class="btn btn-default" data-toggle="tooltip" data-placement="top" title="'.$d['client']['address'].'">'.$d['client']['name'].'</button><a href="mailto:'.$d['client']['email'].'">&lt;'.$d['client']['email'].'&gt;</a></td>';
      echo '</tr>';
  }
  for($i=0;$i<count($f);$i++){
      $d = $f[$i];
      echo '<tr>';
      echo '<td>-</td>';
      echo '<td>-</td>';
      echo '<td>-</td>';
      echo '<td>-</td>';
      echo '<td>'.$d['date'].'</td>';
      echo '<td>-</td>';
      echo '<td>-</td>';
      echo '</tr>';
  }
  print_r($t);
  print_r($f);
?>

这是标准 HTML &lt;tbody&gt; 元素中的输出。我知道交易文件已正确加载,因为在测试脚本时正确输出了文件。我也知道脚本迭代了正确的次数,因为如果我使用echo $i,它会返回预期的结果。但是,当我运行脚本时,表中没有任何输出。

这是交易文件的内容:

==START FAILED TRANSACTION==
Date: 05-2-2017 (Sunday, February 5th, 2017) UTC
==END FAILED TRANSACTION==

==START FAILED TRANSACTION==
Date: 05-2-2017 (Sunday, February 5th, 2017) UTC
==END FAILED TRANSACTION==

==START FAILED TRANSACTION==
Date: 05-2-2017 (Sunday, February 5th, 2017) UTC
==END FAILED TRANSACTION==

==START FAILED TRANSACTION==
Date: 05-2-2017 (Sunday, February 5th, 2017) UTC
==END FAILED TRANSACTION==

==START FAILED TRANSACTION==
Date: 05-2-2017 (Sunday, February 5th, 2017) UTC
==END FAILED TRANSACTION==

==START TRANSACTION DATA==
=START CLIENT INFO=
Address: {ADDR}
Name: {NAME}
Email: {EMAIL}
=END CLIENT INFO=
Inventory ID: {INV}
Photo ID: {ID}
Quantity: {QTY}
Print: {PRNT}
Price: {PRC}
Date of transaction: {DATE}
Raw Braintree transaction data: {TRNS}
Additional info: {ADTL}
==END TRANSACTION DATA==

这可能是我犯的一个非常明显的错误!

附:该页面使用 Bootstrap 和 jQuery,如果这会影响任何内容。

附言附带问题:由于某种原因,任何echo 语句都输出到表之外。不是特别重要,只要表格行和单元格在里面。

【问题讨论】:

  • 我注意到您在代码中没有 &lt;table&gt; 标记...它们只是在这里被排除在外还是您忘记了它们?也不要为格式化道歉 - 为什么不直接修复它?

标签: php html for-loop html-table echo


【解决方案1】:

乍一看,似乎第一个循环没有按您的循环变量索引,您只是在零位置获得元素:

$ln = $lns[0]

应该是:

$ln = $lns[$i]

此外,当您说“我也知道脚本迭代正确的次数”时,您是否检查了所有循环并尝试打印预期值?

【讨论】:

  • 作为评论,我相信 PHP 有一个 foreach 语句可以用来避免这些类型的错误。
  • 我不敢相信我没有抓住这个,谢谢!该脚本仍将迭代正确的次数,但它只会无限地评估第一行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-26
  • 2016-07-26
  • 1970-01-01
  • 1970-01-01
  • 2019-02-09
  • 2018-05-28
  • 1970-01-01
相关资源
最近更新 更多