Php 检查所有数组项是否为空

Php 检查所有数组项是否为空,php,arrays,validation,Php,Arrays,Validation,我正在从表单中添加一个项目数组,如果所有项目都为空,我希望执行一些验证并添加到错误字符串中。因此,我: $array = array( 'RequestID' => $_POST["RequestID"], 'ClientName' => $_POST["ClientName"], 'Username' => $_POST["Username"], 'RequestAssignee' => $_POST[

我正在从表单中添加一个项目数组,如果所有项目都为空,我希望执行一些验证并添加到错误字符串中。因此,我:

$array = array(
    'RequestID'       => $_POST["RequestID"],
    'ClientName'      => $_POST["ClientName"],
    'Username'        => $_POST["Username"],
    'RequestAssignee' => $_POST["RequestAssignee"],
    'Status'          => $_POST["Status"],
    'Priority'        => $_POST["Priority"]
);
然后,如果所有数组元素都为空,则执行:

$error_str .= '<li>Please enter a value into at least one of the fields regarding the request you are searching for.</li>';
$error\u str.='
  • 请在至少一个字段中输入一个与您正在搜索的请求相关的值。
  • ';
    未测试,但您得到逻辑:)

    $error=0;
    foreach($k=>v的数组){
    如果(空($v)){
    $error++;
    }
    }
    如果($error==count($array)){
    $error_str.='
  • 请在至少一个字段中输入一个与您正在搜索的请求相关的值。
  • '; }
    您对$array的定义不正确,并且带有单引号。应改为:

    $array = array( 'RequestID' =>  $_POST["RequestID"],
                    'ClientName' => $_POST["ClientName"],
                    'Username' => $_POST["Username"],
                    'RequestAssignee' => $_POST["RequestAssignee"],
                    'Status' => $_POST["Status"],
                    'Priority' => $_POST["Priority"] );
    

    使用空胶水内爆数组并检查结果字符串的大小:

    <?php if (strlen(implode($array)) == 0) echo 'all values of $array are empty'; ?>
    

    你并不真的需要它。

    您将分别验证这些字段,通过完成此过程,您可以判断数组是否为空(或是否包含无效值,两者相同)

    您可以使用内置的

    如果未提供回调,则将删除所有等于FALSE的输入项(请参见转换为布尔值)

    因此,我们可以用一句简单的话来做到这一点

    if(!array_filter($array)) {
        echo '<li>Please enter a value into at least one of the fields regarding the request you are searching for.</li>';
    }
    
    if(!array_filter($array)){
    echo“
  • 请在至少一个字段中输入一个与您正在搜索的请求相关的值。
  • ”; }
    这很简单:

    foreach($array as $k => $v)
    {
        if(empty($v))
        {
            unset($array[$k]);
        }
    }
    $show_error = count($array) == 0;
    

    您还必须将数组值的封装更改为双引号。

    这是一个较老的问题,但我想我会加入我的解决方案,因为上面没有列出它

    function isArrayEmpty($array) {
        foreach($array as $key => $val) {
            if ($val !== '')
                return false;
        }
        return true;
    }
    

    我有同样的问题,但想分别检查数组中的每个元素,看看哪个元素是空的。这比预期的要困难,因为需要在单独的数组中创建键值和实际值,以检查和响应空数组元素

    print_r($requestDecoded);
    $arrayValues = array_values($requestDecoded);  //Create array of values
    $arrayKeys = array_keys($requestDecoded);      //Create array of keys to count
    $count = count($arrayKeys);
    for($i = 0; $i < $count; $i++){  
        if ( empty ($arrayValues[$i] ) ) {         //Check which value is empty
            echo $arrayKeys[$i]. " can't be empty.\r\n";
        } 
    }
    
    数量不能为空。

    简化使用方法:

    $array = []; //target array
    $is_empty = true; //flag
    
    foreach ($array as $key => $value) {
        if ($value != '')
            $is_empty = false;
    }
    if ($is_empty)
        echo 'array is empty!';
    else
        echo 'array is not empty!';
    


    有趣!我想知道这是否比内爆阵列快。@Capsule对于大小为6的阵列,即使你花了一生的时间检查阵列,你也永远看不到丝毫的差异。对于超过1000个的大小,我建议根本不要使用数组。因为我们谈论的是网站,所以你必须将每个访问者的数量乘以。一个1000或100个访问者的数组计算一个10的数组在CPU成本方面是相同的。您无法决定停止使用阵列,因为您的网站正在获得一些人气;-)我很想知道这是否比我建议的内爆方法快。@dogmatic69已经提到了关于?
    array\u filter()
    的任何基准测试。关于性能-我相信simple
    foreach
    应该比
    array\u filter()
    Introde()
    @xzyfer都要快,
    if(introde($array))echo“…”
    会打印“…”,即使一个数组元素是
    (string)“0”
    。关于
    foreach
    array\u filter()慢-确定吗?一个接一个地删除数组元素比仅仅读取数组元素要快多少?@xzyfer,我做了一些测试——使用
    array\u filter()
    检查是否填充了任何值,这比使用一些布尔变量存储结果和
    break
    第一个无效值的基本
    foreach
    循环至少慢几倍。即使
    array\u filter()
    是一个“本机PHP函数”,它也不能比
    foreach
    更快,因为它必须创建新的数组变量。我投了赞成票,但我还是有点惊讶,这实际上被接受了,因为它没有满足要求,不是吗?如果你说,
    requestID=0
    status=0
    ,当有明确的值时,这将导致“请输入一个值”。他不需要数字。他想知道,如果所有元素都是空的,没有数字,只有一个布尔值。我想Col.粗鲁地说,在PHP中,
    count($array)==0
    count($array)
    都计算为真,因此额外的比较和赋值步骤是不必要的。虽然赋值在php中花费很少。啊,是的,这并没有很大的区别,但我更愿意大部分时间使用布尔值,我不明白为什么反对票是可行的,这是一种可行的方法,并为他创建所需的结果。要说数组是否为空,只找到一个填充的元素就足够了。它被称为逻辑。您可以删除
    strlen
    调用以提高效率<代码>如果(内爆($array))回显“..”
    @binaryLV,如何?同意他们都没能解决这个问题。但是它们是不等价的,不是吗?@xzyfer,如果
    $str
    (string)'0'
    ,那么
    strlen($str)==0
    计算为
    ,而
    $str
    evaluation为
    true
    ,因此
    strlen($str)==0
    不能替换为
    $str
    。与使用
    array\u filter
    相比,此解决方案感觉更正确,因为
    array\u filter
    旨在与回调一起使用,以过滤数组。但你要做的就是检查“空”。所以你把它做成一串,然后检查它的长度。Brilliant@kasimir
    array\u filter
    的回调函数是可选的,手册中明确指出,如果没有提供回调函数,则所有等于FALSE的输入项(请参见转换为布尔值)都将被删除。因此,使用
    array\u filter
    的正确性不亚于此,它只是一种不同的方法;-)你可以用任何一种。双引号实际上稍微慢一点。@AaronHarun。看看问题的原始版本,其中有奇怪的错误引语。这就是说,这纠正了这一点,但并没有试图真正回答问题本身。对于任何阅读本文感到困惑的人,不要将$_帖子用单引号括起来–它不会被评估!我擅自编辑了这些引文。(不是我的道琼斯指数。)
    Array
    (
        [PONumber] => F12345
        [CompanyName] => Test
        [CompanyNum] => 222222
        [ProductName] => Test
        [Quantity] =>
        [Manufacturer] => Test
    )
    
    $array = []; //target array
    $is_empty = true; //flag
    
    foreach ($array as $key => $value) {
        if ($value != '')
            $is_empty = false;
    }
    if ($is_empty)
        echo 'array is empty!';
    else
        echo 'array is not empty!';