Как мне связать предыдущее значение в функции php?

#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.