in_array发出警告信息

时间:2011-11-29 15:20:30

标签: php arrays if-statement for-loop

全部, 我有以下代码:

$qry = "Select * from vendor_options order by vendor_option_name ASC";
$result = mysql_query($qry);
while($resultset = mysql_fetch_array($result)){
    if(isset($_SESSION['pav_choosen_vendor_categories'])){
        for($z=0;$z<$_SESSION['pav_choosen_vendor_categories'];$z++){
            $sVendorId = $_SESSION['pav_vendor_categories_' . $z];
                if($sVendorId==$resultset['vendor_option_id']){
                    $vendor_cats_choosen[] = $sVendorId;
                }
        }
        if(in_array($resultset['vendor_option_id'],$vendor_cats_choosen)){
        ?>
        <input type="checkbox" value="<?php echo $resultset['vendor_option_id']; ?>" class="select_vendor" name="vendor_categories[]" checked><?php echo $resultset['vendor_option_name']; ?><br>
            <?php
        }else{
        ?>
        <input type="checkbox" value="<?php echo $resultset['vendor_option_id']; ?>" class="select_vendor" name="vendor_categories[]"><?php echo $resultset['vendor_option_name']; ?><br>
        <?php
        }
    }
}

我正在尝试检查mysql_fetch_array中返回的值是否已经在我的数组中。假设它在数组中找到的第一个值是在while循环的第四次迭代中。我会收到以下错误:

Warning: in_array() expects parameter 2 to be array, null

一旦达到数组中的值,其余部分就可以正常工作。为什么给第一对夫妇一个错误呢?感谢。

4 个答案:

答案 0 :(得分:2)

看起来您尚未将$vendor_cats_chosen初始化为数组,因此如果条件if($sVendorId==$resultset['vendor_option_id'])不为真,则不会向其附加任何元素,将其隐式转换为数组。< / p>

while循环之前初始化它。您应该在使用之前始终初始化数组。

// Initialize the array
$vendor_cats_chosen = array();
while($resultset = mysql_fetch_array($result)){
  ....

现在,当你的in_array()语句执行时,数组可能为空,但是它将是一个有效的数组。

// $vendor_cats_chosen might be an empty array, or may have elements.
if(in_array($resultset['vendor_option_id'],$vendor_cats_choosen)){

答案 1 :(得分:1)

问题是您的数组并不总是创建。要解决此问题,请添加

$vendor_cats_choosen = array();

代码中while之前的某个地方。

答案 2 :(得分:1)

您只能在$vendor_cats_choosen语句中填充数组if,这意味着它可能不包含任何值。你也没有在开始填充它的循环之前声明它 - 无论如何你应该这样做,因为为未声明的数组添加一个值会发出E_NOTICE

添加行

$vendor_cats_choosen = array();

...在脚本的顶部,错误将消失。如果您认为此数组应包含值,则可能需要检查if语句中的逻辑。

答案 3 :(得分:1)

为了消除警告信息,可以采用两种方法:

1)在生成警告消息的语句之前使用@(但是,这不是一种可取的工程方法)

2)在使用array对象之前,可以在if-else中过滤掉它。 例如,在您的情况下,您可以添加此行

if( $vendor_cats_choosen ){

  if(in_array($resultset['vendor_option_id'],$vendor_cats_choosen)){
    ?>
    <input type="checkbox" value="<?php echo $resultset['vendor_option_id']; ?>" class="select_vendor" name="vendor_categories[]" checked><?php echo $resultset['vendor_option_name']; ?><br>
        <?php
    }else{
    ?>
    <input type="checkbox" value="<?php echo $resultset['vendor_option_id']; ?>" class="select_vendor" name="vendor_categories[]"><?php echo $resultset['vendor_option_name']; ?><br>
    <?php
    }

} ?>