проверить пустое значение в php

Я проверяю значение, чтобы увидеть, пусто ли оно, используя функцию empty() в PHP. Это подтверждает следующее как пустое:

"" (an empty string)
0 (0 as an integer)
0.0 (0 as a float)
"0" (0 as a string)
NULL
FALSE
array() (an empty array)
$var; (a variable declared, but without a value)

Передаваемое значение может быть строкой, массивом или числом. Однако если в строке есть пробел (" "), она не считается пустой. Как проще всего проверить и это условие, не создавая собственную функцию? Я не могу просто сделать empty(trim($value)), так как $value может быть array.

РЕДАКТИРОВАТЬ: я не пытаюсь спросить, как проверить, пуста ли строка. Я уже знаю, что. Я спрашиваю, есть ли способ передать массив, число или строку в empty(), и он вернет правильную проверку, даже если в переданной строке есть пустые места.


person Undefined Variable    schedule 27.06.2014    source источник
comment
возможный дубликат Проверка того, пуста ли строка   -  person Phantom    schedule 27.06.2014
comment
Каковы возможные значения вашего $value?   -  person sectus    schedule 27.06.2014
comment
@sectus массивы, числа и строки   -  person Undefined Variable    schedule 27.06.2014
comment
Ваш заголовок и вопрос противоречат друг другу. В заголовке вы говорите строка, но в вопросе вы говорите, что это может быть массив.   -  person Jørgen R    schedule 27.06.2014
comment
Тогда вряд ли найдется одна функция, которая подходит всем. Проверьте, является ли ваше значение массивом, числом или строкой, и примените проверку соответственно по типу.   -  person deceze♦    schedule 27.06.2014
comment
Какое значение массива должно считаться пустым?   -  person sectus    schedule 27.06.2014
comment
Кроме того, если $value не является переменной, которая не может быть задана законно, не используйте empty. Просто используйте !$value для того же эффекта без ненужного подавления сообщений об ошибках.   -  person deceze♦    schedule 27.06.2014
comment
@deceze - да, наверное. должен был иметь флаг для empty() - например, STRICT, который проверяет обрезку ($string) на наличие и default, который проверяет необрезанную строку на ....   -  person Undefined Variable    schedule 27.06.2014
comment
@ Джек empty($var) || ctype_space($var) проще.   -  person Jørgen R    schedule 27.06.2014
comment
@jurgemaister - спасибо, что указали на это. Обновлено.   -  person Undefined Variable    schedule 27.06.2014
comment
Ответ (согласно редактированию): нет.   -  person sectus    schedule 27.06.2014


Ответы (3)


Лучший способ — создать свою собственную функцию, но если у вас действительно есть причина не делать этого, вы можете использовать что-то вроде этого:

$original_string_or_array = array(); // The variable that you want to check
$trimed_string_or_array = is_array($original_string_or_array) ? $original_string_or_array : trim($original_string_or_array);
if(empty($trimed_string_or_array)) {
    echo 'The variable is empty';
} else {
    echo 'The variable is NOT empty';
} 
person Samuil Banti    schedule 27.06.2014

Просто напишите собственную функцию isEmpty(), которая соответствует вашим потребностям.

function isEmpty($value) {
    if(is_scalar($value) === false)
        throw new InvalidArgumentException('Please only provide scalar data to this function');

    if(is_array($value) === false) {
        return empty(trim($value));

    if(count($value) === 0)
        return true;

    foreach($value as $val) {
        if(isEmpty($val) === false)
            return false;
    }

    return false;
}
person TiMESPLiNTER    schedule 27.06.2014
comment
Да, это работает, но в вопросе конкретно говорится ... without creating my own function ... - person Mark Miller; 27.06.2014
comment
Спасибо Timesplinter, но, как указал Марк, я проверял самый простой способ обойтись без моей собственной функции. - person Undefined Variable; 27.06.2014
comment
Ну почему бы вам не написать свою собственную функцию? Ты намного более гибкий. Вы можете параметризовать все. Например, если значения должны быть обрезаны для сравнения с пустыми и т. д. - person TiMESPLiNTER; 27.06.2014
comment
:-) Вы упускаете суть. Я мог бы достаточно легко написать свою собственную функцию; Я просто проверял, есть ли способ сделать это проще, о чем я не знал. Как и вариант ctype_space, упомянутый судьей, о котором я совершенно забыл. Кстати, ваша функция крутая. - person Undefined Variable; 27.06.2014

Я действительно предпочитаю функцию, сделанную TiMESPLiNTER, но вот альтернатива, без функции

if( empty( $value ) or ( !is_array( $value ) and empty( trim( $value ) ) ) ) {
    echo 'Empty!';
}
else {
    echo 'Not empty!';
}

Обратите внимание, что, например, $value = array( 'key' => '' ) вернет Not empty!. Поэтому я бы предложил использовать функцию TiMESPLiNTERs.

person LinkinTED    schedule 27.06.2014