Php 当项不存在时返回true的in_数组

Php 当项不存在时返回true的in_数组,php,arrays,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 pr

我有一个表单,允许我的用户根据需要编辑信息。作为此表单的一部分,用户最多可以插入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是否在存储所选ban id的所有数字的数组中

banid 237的数组如下所示:
数组([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);
        }
    }           
}
($i=0;$i<5;$i++)的

{
$proof=$checkprooflist[$i];
$prooftype=$checkprooftypelist[$i];
如果(!空($proof))
{                       
if(!in_数组($i,$proofnumberlist))
{
$query2=“插入到证明(banid、证明、类型、编号)值($id、$proof’、$prooftype’、$i)”;
$result2=mysql\u查询($query2);
}
其他的
{
$query2=“更新证明集证明='$proof',类型='$prooftype',其中编号=$i,banid=$id”;
$result2=mysql\u查询($query2);
}
}           
}
然而,我的问题是,对于上面的数组,行
if(!in_array($I,$proofnumberlist))
返回false,因此在$I=0时不输入if语句

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

谢谢你的阅读,我感谢你能给我的任何帮助


Jon.

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

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

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

必须使用的
$strict
参数,这是第三个参数(默认值=false)

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

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

另一方面,您可以使用
插入来避开整个
数组中的
检查。。。在重复密钥更新时


这将使您的代码更加清晰。另一方面,您可以使用
插入来避开整个
数组中的
检查。。。在重复密钥更新时


这将使您的代码更加清晰。请参见此数组中没有0:

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

索引0处的元素为null,而不是0。您首先从何处获得此数组?

此数组中没有0:

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

索引0处的元素为null,而不是0。您首先从何处获得此数组?

此数组由数字字段的行值填充。但是,当我阅读您的评论时,我修改了此选项,仅插入NOTNULL值,因此数组现在将读取:[0]=>1。这本身就解决了这个问题。很高兴它有帮助。作为记录,我喜欢Cory的解决方案,这是我在自己的代码中通常处理此类查询的方式。但是,当我阅读您的评论时,我修改了此选项,仅插入NOTNULL值,因此数组现在将读取:[0]=>1。这本身就解决了这个问题。很高兴它有帮助。作为记录,我喜欢Cory的解决方案,这是我通常在自己的代码中处理此类查询的方式。谢谢Cory。我将对此进行调查,因为我实际上并不知道有这样的事情存在!谢谢你,科里。我将对此进行调查,因为我实际上并不知道有这样的事情存在!谢谢你,Jack,但是当我将$strict设置为true时,我遇到了其他几个错误,因此更改了数组的性质,使其仅填充NOTNULL值。这个新数组现在在$strict设置为false的情况下按预期工作。@JYoung很高兴知道我的代码至少让你修复了它:)谢谢你,杰克,但是当我将$strict设置为true时,我遇到了其他几个错误,因此改变了数组的性质,使其只填充非空值。这个新数组现在可以正常工作,$strict设置为false。@JYoung很高兴知道我的代码至少让您修复了它:)