PHP - 有没有办法验证数组中的所有值

时间:2009-07-27 05:57:50

标签: php

使用PHP ..

这就是我所拥有的......我将解释整个事情,也许有人可以帮我解释逻辑,并指出我正确的方向。

我有一个我正在处理的邮件系统。在cc部分中,我允许用户用分号分隔值,如:1; 2; 3; 4 ...

当这些值传递给我的函数时,我使用explode将它们放入数组中。我想做的是先检查一下。我想首先确保格式正确并且每个值都正确分隔。如果没有,我应该显示错误。完成后,我想确保每个数字实际上都有效。我可以查询数据库,将reslts放入一个数组,并考虑使用in_array()函数来验证这一点,但我不确定它是否可行。有人可以帮我解决这个问题吗?

感谢。

编辑:

在CSV值列表中检测虚假值的最佳方法是什么?

4 个答案:

答案 0 :(得分:3)

为了验证每个数字是否正确分隔,您需要检查答案中是否没有空格。所以这样的事情应该有效:

$text = trim($id);
if(strpos(" ", $id) !== false)
{
    //error
}

接下来,要检查值,这很简单

if(!in_array($id, $database_ids))
{
    // error
}

最后,如果您只使用数值,请检查ID是否为数字

if(!is_numeric($id))
{
    //error
}

要合并,将其包装成数组

foreach($exploded_array as $key => $id)
{
    $id = trim(id);
    if(!is_numeric($id))
    {
        //error
    }
    if(strpos(" ", $id) !== false)
    {
        //error
    } 
    if(!in_array($id, $database_ids))
    {
        // error
    }
}

我希望代码在获得变量时非常自我解释,但如果你需要我解释更多,请随意提问。

答案 1 :(得分:0)

您正在寻找类似的内容:

foreach ($array as $value) {
   //do checking here
}

答案 2 :(得分:0)

array_filter可以是一种选择。

答案 3 :(得分:0)

正如他们所建议的那样,这是一个依赖array_filter()

的实现
<?php
function checkValue($value)
{
    $id = trim(id);
    if(!is_numeric($id))
    {
        return false;
    }
    if(strpos(" ", $id) !== false)
    {
        return false;
    } 
    if(!in_array($id, $database_ids))
    {
        return false;
    }
    return true;
}

$values = '1;2;3;4';
$values_extracted = explode(';', $values);

if(count($values) == count(array_filter($values_extracted), 'checkValue'))
{
   // Input was successfully validated
}
?>