вот мой код:
function my_function() { $states = array('schwarz', 'rot', 'blau'); foreach(range(0, 5) as $number) { foreach ($states as $state) { $result = "<img src=\"inventory_images/8.jpg\" onclick=\"changecolor(this)\" name=\"nummer.$number\" />"; $testPath = "transactions/Ordner$number/$state.png"; if (file_exists($testPath)) { $result = $testPath; } } break; } return $result; } $imagesPerLine = array(1=>1, 2=>2); $default = 3; $lines = array(1, 2, 3); $html=""; foreach ($lines as $line) { if (!isset($imagesPerLine[$line])) { $imagesPerLine[$line] = $default; } $html.= "<tr>\n"; for ($i = 1; $i <= $imagesPerLine[$line]; $i++) { $html.=sprintf("<td>%s</td>\n", my_function()); } $html.="</tr>\n"; } echo $html;
и это результат:
<tr> <td><img src="inventory_images/8.jpg" onclick="changecolor(this)" name="nummer.0" /></td> </tr> <tr> <td><img src="inventory_images/8.jpg" onclick="changecolor(this)" name="nummer.0" /></td> <td><img src="inventory_images/8.jpg" onclick="changecolor(this)" name="nummer.0" /></td> </tr> <tr> <td><img src="inventory_images/8.jpg" onclick="changecolor(this)" name="nummer.0" /></td> <td><img src="inventory_images/8.jpg" onclick="changecolor(this)" name="nummer.0" /></td> <td><img src="inventory_images/8.jpg" onclick="changecolor(this)" name="nummer.0" /></td> </tr>
теперь я не знаю, как настроить мою часть foreach, чтобы получить значение name = n + 1.the должно быть:
<tr> <td><img src="inventory_images/8.jpg" onclick="changecolor(this)" name="nummer.0" /></td> </tr> <tr> <td><img src="inventory_images/8.jpg" onclick="changecolor(this)" name="nummer.1" /></td> <td><img src="inventory_images/8.jpg" onclick="changecolor(this)" name="nummer.2" /></td> </tr> <tr> <td><img src="inventory_images/8.jpg" onclick="changecolor(this)" name="nummer.3" /></td> <td><img src="inventory_images/8.jpg" onclick="changecolor(this)" name="nummer.4" /></td> <td><img src="inventory_images/8.jpg" onclick="changecolor(this)" name="nummer.5" /></td> </tr>
во-первых, я подумал: «сломайте»; или "return $ result"; неправильно, но я не думаю, что сейчас. Может кто-нибудь помочь мне изменить свой сценарий, может быть? спасибо и привет!
Ваша логика ошибочна. Поскольку вы возвращаете строку из своей функции и распечатываете ее снаружи, вам нужно изменить способ ее выполнения. В настоящее время вы делаете это:
for ($i = 1; $i <= $imagesPerLine[$line]; $i++) { $html.=sprintf("<td>%s</td>\n", my_function()); }
Звучит для меня так, как вам нужно, чтобы ваша функция завершала свой контент с помощью <td>...</td>
, а также объединялась. Поэтому внутри вашей функции вы должны:
$result .= "<td>etc etc $number etc etc</td>\n";
Также было бы хорошей практикой положить $result = "";
в верхней части этой функции.
Теперь, когда вы возвращаете $result
, вы должны получить все, что вы собрали в этих циклах, и добавьте это значение в $html
, изменив цикл вызова:
for ($i = 1; $i <= $imagesPerLine[$line]; $i++) { $html .= my_function(); }