#php #function #if-statement
#php #функция #if-оператор
Вопрос:
Хорошо, это довольно сложно объяснить, но в основном я написал функцию PHP, которая печатает теги a, но нуждается в некоторой логике. Вот что у меня есть на данный момент
function print_a($element_name, $completed_system, $category_name){
// hw_bottom
// hw_top
// hw_center
$elements = array("hardware", "software", "payment", "service", "optional");
$last_category = last_category($completed_system);
if($last_category == $category_name){
echo "<a class="{$element_name} hw_center lf"></a>";
}else{
echo "<a class="{$element_name} hw_bottom lf"></a>";
}
}
и вот как я это называю
print_a("hw-tab", $completed_system, 'hardware');
print_a("sw-tab", $completed_system, 'software');
print_a("pp-tab", $completed_system, 'payment');
print_a("serv-tab", $completed_system, 'service');
print_a("ou-tab", $completed_system, 'optional');
кажется, все в порядке, но моя логика немного не в порядке … в основном, что мне нужно, так это то, что я печатаю один из трех классов hw_bottom, hw_center или hw_top, и способ, которым моя логика работает сейчас, заключается в том, что при выполнении условия if я печатаю hw_center …это правильно …что мне нужно, так это то, что если условие if совпадает с чем-либо после аппаратного обеспечения, мне нужно превратить все предыдущие в hw_top, например:
если условие if совпало при оплате, то это то, что мне нужно
<a class="hw-tab hw_top lf"></a>
<a class="sw-tab hw_top lf"></a>
<a class="pp-tab hw_center lf"></a>
<a class="serv-tab hw_bottom lf"></a>
<a class="ou-tab hw_bottom lf"></a>
Как вы можете видеть, все значения после оплаты — hw_bottom, а все предыдущие — hw_top и это hw_center …. я знаю, это трудно объяснить … если кому-то нужна дополнительная информация, сообщите ms
Обновить
ВОТ решение, к которому я пришел после просмотра всех ответов
function print_a($completed_system){
$topClass = true;
$elements = array("hw-tab" => "hardware", "sw-tab" => "software", "pp-tab" => "payment", "serv-tab" => "service", "ou-tab" => "optional");
$last_category = last_category($completed_system);
foreach ($elements as $key => $element) {
if($last_category == $element){
echo "<a class="{$key} hw_center lf"></a>";
$topClass = false;
} else {
if ($topClass) {
echo "<a class="{$key} hw_top lf"></a>";
} else {
echo "<a class="{$key} hw_bottom lf"></a>";
}
}
}
}
Комментарии:
1. вот мой массив $completed_systems pastie.org/2810072
Ответ №1:
Возможно, этот код может вам помочь (если я понимаю вопрос):
<?php
$topClass = true;
$elements = array("hardware", "software", "payment", "service", "optional");
foreach ($elements as $index => $element) {
if (floor(count($elements) / 2) == $index) {
echo "<a class="{$element} hw_center lf"></a>";
$topClass = false;
} else {
if ($topClass) {
echo "<a class="{$element} hw_top lf"></a>";
} else {
echo "<a class="{$element} hw_bottom lf"></a>";
}
}
}
РЕДАКТИРОВАТЬ: обновите после вашего объяснения, что вам нужно.
Комментарии:
1. спасибо …. я обновлю свой ответ, чтобы показать вам, с чем я пошел… ваш ответ удался …. спасибо
Ответ №2:
Я не совсем понимаю, что вы пытаетесь сделать, но не могли бы вы просто позволить функции возвращать true / false, если требование выполнено, а затем добавить его в качестве другого параметра к следующему вызову функции.
Проблема может заключаться в том, что будет затронут только единственный элемент непосредственно после того, где условие оценивается как true. Вы решаете это, просто используя или:
$myBool = false;
$myBool = $myBool || print_a("hw-tab", $completed_system, 'hardware', $myBool);
etc..
и затем, если $myBool имеет значение true, вы напечатаете hw_bottom, а если false, вы напечатаете hw_top и время, когда функция изменила состояние между true и false, вы напечатаете hw_center.