сомнение в foreach -php - PullRequest
       8

сомнение в foreach -php

0 голосов
/ 08 июня 2011

У меня есть этот код. В основном определяет, является ли какая-либо позиция массива пустой или имеет вход, равный нулю.

$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 ($form[$field][second])? я не знаю, если это правильно, или существует лучший вариант спасибо

Ответы [ 4 ]

2 голосов
/ 08 июня 2011

если $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;
}
0 голосов
/ 08 июня 2011

Используйте рекурсивную функцию, подобную этой:

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, если он не нашел пустую позицию.

0 голосов
/ 08 июня 2011

Разве вы не можете сделать что-то вроде следующего:

if (empty($form[$field+1])) {
    echo 'Empty';
}
0 голосов
/ 08 июня 2011

Может быть, я совершенно неправ, но почему бы и нет:

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.
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...