array_key_exists в foreach - PullRequest
       15

array_key_exists в foreach

0 голосов
/ 12 августа 2010

Привет! Я сейчас использую этот код,

<?php foreach($search_results as $rslt) : ?>
    <?
    $code = $rslt['code'];
    if(array_key_exists($code, $short_list)) {
        $set = "set";
    }
    ?>
    <div class="row <? echo $set;?>"></div>

Я пытаюсь добиться того, чтобы, если массив равнялся $rslt['code'], тогда присваивал бы div класс set, иначе массив, с которым я проверяю, выглядит так,

    Array
(
    [849650047] => Y
    [849652539] => Y
    [849652774] => Y
    [849656557] => Y
    [849652014] => Y
)

Однако каждый раз, когда я зацикливаюсь, все мои div устанавливаются с помощью класса 'set'? Это должно быть только там, где array_key равен текущему $code

Ответы [ 3 ]

4 голосов
/ 12 августа 2010

Ну, они все установлены, потому что вы никогда не инициализируете переменную $set:

<?php foreach($search_results as $rslt) : ?>
    <?
    $set = '';
    $code = $rslt['code'];
    if(array_key_exists($code, $short_list)) {
        $set = "set";
    }
    ?>
    <div class="row <? echo $set;?>"></div>

Кроме того, просто используйте isset() вместо array_key_exists (это более эффективно и меньшемногословно):

    if(isset($short_list[$code])) {
        $set = "set";
    }
0 голосов
/ 12 августа 2010

Избегайте альтернативного синтаксиса структуры управления в PHP.Это уродливо и делает ваш код более сложным для поддержки в долгосрочной перспективе.Также старайтесь избегать чрезмерного переключения контекста с помощью <?php ?>;это делает вашу логику излишне сложной для понимания.

<?php

foreach ($search_results as $result) {
  $set = isset($short_list[$result['code']]) ? ' set' : '';
  echo "<div class=\"row$set\"></div>";
}

Обратите внимание, что isset() вернет false, если ключ существует в массиве, но его значение равно нулю.Что-то, на что следует обратить внимание, если вы хотите, чтобы класс set применялся, даже если значение $short_list[$result['code']] равно нулю.

0 голосов
/ 12 августа 2010

просто добавьте unset($set); в конце вашего цикла.Или вы можете сделать что-то вроде ...

<?php foreach($search_results as $rslt) : ?>
    <div class="row <? print array_key_exists($rslt['code'], $short_list)? 'set':''; ?>"></div>
<?php endforeach; ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...