如何结合两个大佬的

时间:2013-06-04 10:33:42

标签: php foreach

嘿,我的脚本出现了问题...... 这是第一部分:

$imagesPerLine = array(1=>2, 2=>3); $default = 4;

$lines = array(1, 2, 3);
foreach ($lines as $line) {
  if (!isset($imagesPerLine[$line])) {
    $imagesPerLine[$line] = $default;
  }
  echo "<tr>\n";
  for ($i = 1; $i <= $imagesPerLine[$line]; $i++) {
    echo "<td>[img]</td>\n";
  }
  echo "</tr>\n";
}

因此我得到以下内容:

 <tr>
   <td>[img]</td>
   <td>[img]</td>
 </tr>
 <tr>
   <td>[img]</td>
   <td>[img]</td>
   <td>[img]</td>
 </tr>
 <tr>
   <td>[img]</td>
   <td>[img]</td>
   <td>[img]</td>
   <td>[img]</td>
 </tr>

但不是“[img]”而是希望它显示:

function getTransactionStatusImagePath($transactionId)
{
$states = array('schwarz', 'rot', 'blau');

$path = '';

foreach ($states as $state) {
  $testPath = sprintf('transactions/Ordner%s/%s.png', $transactionId, $state);

    if (file_exists($testPath)) {
      $path = $testPath;
      break;
    }
}
return $path;
}

$transactionIds = range(1,9);

foreach ($transactionIds as $transactionId) :

if (($transactionId % $imagesPerLine) == 1)
  echo "<tr>\n";

$path = getTransactionStatusImagePath($transactionId);

$imageHtml = ('' !== $path)
    ? '<img src="' . $path . '" />'
    : '<img name="nummer.' . $transactionId . '" src="inventory_images/8.jpg"  onclick="changecolor(this)" />' ;

echo "<td>$imageHtml</td>\n";

if (! ($transactionId % $imagesPerLine))
  echo "</tr>\n";

endforeach;

所以它应该是这样的:

 <tr>
   <td><img name="nummer.1" src="inventory_images/8.jpg" onclick="changecolor(this)" /></td>
   <td><img name="nummer.1" src="inventory_images/8.jpg" onclick="changecolor(this)" /></td>
 </tr>
 <tr>
   <td><img name="nummer.1" src="inventory_images/8.jpg" onclick="changecolor(this)" /></td>
   <td><img name="nummer.1" src="inventory_images/8.jpg" onclick="changecolor(this)" /></td>
   <td><img name="nummer.1" src="inventory_images/8.jpg" onclick="changecolor(this)" /></td>
 </tr>
 <tr>
   <td><img name="nummer.1" src="inventory_images/8.jpg" onclick="changecolor(this)" /></td>
   <td><img name="nummer.1" src="inventory_images/8.jpg" onclick="changecolor(this)" /></td>
   <td><img name="nummer.1" src="inventory_images/8.jpg" onclick="changecolor(this)" /></td>
   <td><img name="nummer.1" src="inventory_images/8.jpg" onclick="changecolor(this)" /></td>
 </tr>

我应该如何结合这两个地方来实现我的目标? 问候!

1 个答案:

答案 0 :(得分:0)

问题是由于您在生成HTML时回显HTML而不是将其构建为完整字符串,然后回显它。如果您执行以下操作会更容易:

$imagesPerLine = array(1=>2, 2=>3); $default = 4;
$lines = array(1, 2, 3);
$html="";
foreach ($lines as $line) {
  if (!isset($imagesPerLine[$line])) {
    $imagesPerLine[$line] = $default;
  }
  $html.= "<tr>";
  for ($i = 1; $i <= $imagesPerLine[$line]; $i++) {
   $html.=sprintf("<td>%s</td>",function_to_generate_image_detail($imagesPerLine[$line]));
  }
  $html.="</tr>";

}
 echo $html;

很难确切地确定如何生成图像文本,但显然,您的功能只需要返回

<img name="nummer.1" src="inventory_images/8.jpg" onclick="changecolor(this)" />

或其他任何你需要的东西。你似乎能够创造这一点,所以我会把它留给你。

请注意,您的代码包含其他错误,包括:

if (($transactionId % $imagesPerLine) == 1)

您使用数组作为分区中的分母。确实不明智。按照我的建议编写功能,你将成为一个快乐的家伙。或者是chapess。