怀疑foreph -php

时间:2011-06-08 15:37:00

标签: php loops foreach

我有这个代码。基本上标识数组的任何位置是否为空或输入是否等于零。

$fields = array("first", "second", "third");

function check($fields, $form) {
    foreach($fields as $field) {
        if(empty($form[$field]) || $form[$field] === 0) {
            echo 'empty';
            return false;
            break;
        }
    }
}

我现在怀疑的是,我怎么能做一个回声,例如显示第二个位置是空的?

用if? if ($form[$field][second])?我不知道这是否正确,或者存在更好的选择 感谢

4 个答案:

答案 0 :(得分:2)

如果$field是您想要的echo,那么只需将其添加到“空”:

$fields = array("first", "second", "third");

function check($fields, $form)
{
    foreach($fields as $field)
    {
        if(empty($form[$field]))
        {
            echo $field.' is empty';
            return false;
        }
    }
}

如果您需要索引值:

$fields = array("first", "second", "third");

function check($fields, $form)
{
    foreach($fields as $k=>$field)
    {
        if(empty($form[$field]))
        {
            echo $k.' is empty';
            return false;
        }
    }
}

最终如果目标是检索空位(如果check返回-1则没有空位置):

$fields = array("first", "second", "third");
function check($fields, $form)
{
    foreach($fields as $k=>$field)
    {
        if(empty($form[$field]))
            return $k;
    }
    return -1;
}

答案 1 :(得分:0)

你不能做以下事情:

if (empty($form[$field+1])) {
    echo 'Empty';
}

答案 2 :(得分:0)

使用这样的递归函数:

function isEmpty($array){
    if(is_array($array)){
        foreach($array as $key=>$value){
            if(isEmpty($value) !== false) return $key;
        }
        return false;
    }else{
        if($array === 0 || empty($array)){
            return true;
        }
    }
}

这将遍历数组的深度,并返回找到空位置的索引,如果找不到空位则返回false。

答案 3 :(得分:-1)

也许我完全错了,但为什么不呢:

if(empty($form[2]) || $form[2] === 0) {
  echo 'second element is empty';
}

如果你的问题是'我怎样才能知道我在做foreach'时的指标,那么答案就是:

$fields = array("first", "second", "third");

function check($fields, $form) {
    foreach($fields as $i => $field) {
        if ( (empty($form[$field]) || $form[$field] === 0) && ($i == 2)) {
            echo '2n element is empty';
            return false; // no need to break; as you have returned something.
        }
    }
}