переменная php не возвращает ожидаемого - PullRequest
2 голосов
/ 30 июня 2011

У меня есть неупорядоченный список, который генерируется из базы данных. В зависимости от значения одного из возвращаемых полей класс тега li должен иметь разные значения. К сожалению, они все возвращаются "неактивными". Я знаю, что это должно быть что-то простое, но я смотрел на это часами и просто не вижу этого.

Вот код:

<ul class="tabs">
   <? foreach ($tracks AS $track) {
    $active = (strtolower($track->shortname === 'dpp')) ? ' class="active"' : 'class="inactive"';
    echo "<p>".strtolower($track->shortname). " is ".$active."</p>"; ?>
    <li <?= $active; ?>><a href="#<?= strtolower($track->shortname); ?>"><?= $track->name; ?></a></li>
   <? } ?>
</ul>

Вот что на самом деле печатается:

<ul class="tabs"> 
    <p>dpp is class="inactive"</p>  <li class="inactive"><a href="#dpp">Digital Path to Purchase</a></li> 
    <p>cre is class="inactive"</p>  <li class="inactive"><a href="#cre">Fueling Creativity</a></li> 
</ul> 

Очевидно, что первый возвращает $ track-shortname dpp, так почему же переменной $ active не присвоено значение "class = active"?

Ответы [ 3 ]

2 голосов
/ 30 июня 2011

Вы допустили ошибку в выражении, где вы проверяете короткое имя:

$active = (strtolower($track->shortname === 'dpp')) ? ' class="active"' : 'class="inactive"';
                     ^                           ^

Вы наверняка захотите поставить его только вокруг $track->shortname:

$active = (strtolower($track->shortname) === 'dpp') ? ' class="active"' : 'class="inactive"';
                     ^                 ^

В противном случаеВы пытались уменьшить строковое логическое значение, которое является либо истинным, либо ложным, но в вашем случае оно всегда ложно, следовательно, неактивный класс CSS.

Кстати, вы можете сэкономить еще одну пару:

$active = strtolower($track->shortname) === 'dpp' ? ' class="active"' : 'class="inactive"';
         ^                                       ^
1 голос
/ 30 июня 2011

Одна из ваших близких скобок находится не в том месте.

Изменение:

$active = (strtolower($track->shortname === 'dpp')) ? ' class="active"' : 'class="inactive"';

Кому:

$active = (strtolower($track->shortname) === 'dpp') ? ' class="active"' : 'class="inactive"';

С круглыми скобками $track->shortname сравнивается с dpp перед любым преобразованием в нижний регистр. Затем результат этого сравнения (логическое) передается в strtolower. Это приводит к тому, что strtolower просто возвращает строковое представление того, что в результате троичного сравнения оценивается как ложное.

1 голос
/ 30 июня 2011

Код (strtolower($track->shortname === 'dpp')) выглядит неправильно.Вы ставите strtolower вокруг сравнения, и вы, вероятно, просто хотите получить его вокруг $track->shortname.

...