2013-06-04 5 views
0

эй там я получил Litte проблема с моим сценарием ... это первая часть:, как объединить два 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> 

, но вместо того, чтобы "[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> 

Как я должен объединить эти две задачи для достижения моей цели? приветствия!

ответ

0

Проблема вызвана тем, что вы эхом отзываете свой 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) 

где вы используете массив в качестве знаменателя в разделении. Неразумно. Напишите функцию, как я предложил, и вы будете счастливым человеком. Или хапес.

Смежные вопросы