Как связать предыдущее значение в функции php? - PullRequest
0 голосов
/ 04 ноября 2011

Хорошо, это довольно сложно объяснить, но в основном я написал функцию 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>";
        }

    }
    }
}

Ответы [ 2 ]

1 голос
/ 04 ноября 2011

Может быть, этот код может помочь вам (если я понимаю вопрос):

<?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 голос
/ 04 ноября 2011

Я не совсем понимаю, что вы пытаетесь сделать, но вы не можете просто позволить функции вернуть true / false, если требование выполнено, а затем добавить его в качестве другого параметра для следующего вызова функции.

Проблема будет заключаться в том, что будет затронут только единственный элемент непосредственно после того, где условие оценивается как истинное. Вы решаете это, просто используя или:

$myBool = false;
$myBool = $myBool || print_a("hw-tab", $completed_system, 'hardware', $myBool);
etc..

и затем, если $ myBool равно true, вы напечатаете hw_bottom, а если false, вы напечатаете hw_top, а время, когда функция изменила состояние между true и false, вы напечатаете hw_center.

...