array_key_exists在foreach中

时间:2010-08-12 14:21:05

标签: php arrays foreach

您好,我目前正在运行此代码,

<?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设置类,否则我检查的数组看起来不像这样,

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

但是每次循环我所有的div都会被设置为'set'类?它应该只是array_key等于当前$code

的位置

3 个答案:

答案 0 :(得分:4)

嗯,它们都已设置,因为您永远不会初始化$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";
    }

答案 1 :(得分:0)

只需在循环结束时添加unset($set);即可。或者你可以做点什么......

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

答案 2 :(得分:0)

避免PHP中的备用控制结构语法。这很丑陋,从长远来看,使代码更难维护。同时尽量避免使用<?php ?>进行过多的上下文切换;它使你的逻辑难以理解。

<?php

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

请注意,如果数组中存在键,isset()将返回false,但其值为null。如果您希望应用“set”类,即使$short_list[$result['code']]的值为null,也需要注意。