2013-06-04 111 views
0

嘿我買了我的腳本豆蔻問題...... 這是第一部分:如何結合兩個foreache's

$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> 

但不是「[圖]」我希望它顯示:

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> 

我應該如何結合這兩個foreache's達到我的目標? 問候!

回答

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。