当item不存在时,in_array返回true

时间:2012-05-15 02:29:49

标签: php arrays

我有一个表单,允许我的用户根据需要编辑信息。作为此表单的一部分,用户最多可以插入5种类型的证明。所有证据都存储在一个单独的表格中:

Table: Proof

proofid - primary key
banid - foreign key -> links to banlist table which stores all other information
proof - the link to which contains the proof
type - the type of proof (image, demo, league, ...)
number - the index number of the proof (0 up to 4)

我还有以下代码来更新或插入证明项。它遍历每个字段,并检查数组中当前选定的项是否为空。如果为true,则检查$ i是否在数组中,该数组存储所选禁用ID的所有数字。

对于banid 237,数组看起来像这样:Array ( [0] => [1] => 1 )

这实际上表示第一个证明字段为空,但第二个不是,表中存在记录。

for($i = 0; $i < 5; $i++)
{
    $proof = $checkprooflist[$i];
    $prooftype = $checkprooftypelist[$i];

    if (!empty($proof))
    {                       
        if(!in_array($i, $proofnumberlist))
        {
            $query2 = "INSERT INTO proof (banid, proof, type, number) VALUE ($id, '$proof', '$prooftype', $i)";
            $result2 = mysql_query($query2);
        }
        else
        {
            $query2 = "UPDATE proof SET proof = '$proof', type = '$prooftype' WHERE number = $i AND banid = $id";
            $result2 = mysql_query($query2);
        }
    }           
}

我遇到的问题是,对于上面的数组,行if(!in_array($i, $proofnumberlist))返回false,因此当$ i = 0时不会输入if语句。

它适用于所有其他值(其中$ i = 1,...)等等,但不适用于$ i = 0。

感谢您的阅读,感谢您给予我的任何帮助。

乔恩。

3 个答案:

答案 0 :(得分:3)

您必须使用in_array()$strict参数,它是第三个参数(默认值= false)。

由于类型杂耍,空字符串可以等于0等。$strict参数确保也测试类型。

if (!in_array($i, $proofnumberlist, true))

答案 1 :(得分:2)

另一方面,您可以使用in_array来回避整个INSERT ... ON DUPLICATE KEY UPDATE检查。

这会让你的代码更清晰一些。见http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

答案 2 :(得分:1)

此阵列中没有0:

Array ( [0] => [1] => 1 )

索引0处的元素为null,而不是0.您在哪里首先获得此数组?