Php is empty array

Php is empty array

Часто возникают ситуации, когда нужно проверить существование или пустоту переменной. В PHP для этого есть функции isset() , empty() и array_key_exists() .

Проверка существования переменной

Функция isset() возвращает true , если переменная существует и её значение не null :

Если передать в isset() несколько переменных, она вернёт true при существовании всех переменных:

Результат в браузере: В PHP 7 появился Null-коалесцентный оператор ?? . Он позволяет получить значение переменной, если она есть, а иначе — значение по-умолчанию:

Проверка на пустоту

Напомню, переменная считается пустой (приводится к false), если она имеет одно из следующих значений:

  • "" (пустая строка)
  • 0 (целое или дробное число)
  • "0" (строка)
  • null
  • false
  • [] (пустой массив)
  • $v (переменная объявлена, но не имеет значения)

Функция empty() возвращает true , если переменная не существует или пустая:

Поведение isset() и empty() сначала может немного запутать: первая возвращает true при существовании переменной, вторая — при не существовании. К этому нужно просто привыкнуть.

На самом деле isset() и empty() , аналогично echo , являются синтаксическими конструкциями, а не функциями.

Существование элемента массива

Как мы узнали чуть выше, isset() возвращает false , если переменная существует, но имеет значение null . Для обычных переменных это терпимо, но при работе с массивами в некоторых случаях требуется точно знать, существует ли элемент массива или нет, даже со значением null.

В PHP для этого существует функция array_key_exists() :

An empty array can sometimes cause software crash or unexpected outputs. To avoid this, it is better to check whether an array is empty or not beforehand. There are various methods and functions available in PHP to check whether the defined or given array is an empty or not. Some of them are given below:

    Using empty() Function: This function determines whether a given variable is empty. This function does not return a warning if a variable does not exist.
Читайте также:  Как найти отношение отрезков

players will either be empty or a comma separated list (or a single value). What is the easiest way to check if it’s empty? I’m assuming I can do so as soon as I fetch the $gameresult array into $gamerow ? In this case it would probably be more efficient to skip exploding the $playerlist if it’s empty, but for the sake of argument, how would I check if an array is empty as well?

18 Answers 18

If you just need to check if there are ANY elements in the array

If you need to clean out empty values before checking (generally done to prevent explode ing weird strings):

An empty array is falsey in PHP, so you don’t even need to use empty() as others have suggested.

PHP’s empty() determines if a variable doesn’t exist or has a falsey value (like array() , 0 , null , false , etc).

In most cases you just want to check !$emptyVar . Use empty($emptyVar) if the variable might not have been set AND you don’t wont to trigger an E_NOTICE ; IMO this is generally a bad idea.

Some decent answers, but just thought I’d expand a bit to explain more clearly when PHP determines if an array is empty.

An array with a key (or keys) will be determined as NOT empty by PHP.

As array values need keys to exist, having values or not in an array doesn’t determine if it’s empty, only if there are no keys (AND therefore no values).

So checking an array with empty() doesn’t simply tell you if you have values or not, it tells you if the array is empty, and keys are part of an array.

Читайте также:  Как поменять вид клавиатуры на самсунге

So consider how you are producing your array before deciding which checking method to use.
EG An array will have keys when a user submits your HTML form when each form field has an array name (ie name="array[]" ).
A non empty array will be produced for each field as there will be auto incremented key values for each form field’s array.

Take these arrays for example:

If you echo out the array keys and values for the above arrays, you get the following:

[UserKeyA] => [UserValueA]
[UserKeyB] => [UserValueB]

[0] => [UserValue01]
[1] => [UserValue02]

And testing the above arrays with empty() returns the following results:

$ArrayTwo is not empty

$ArrayThree is not empty

An array will always be empty when you assign an array but don’t use it thereafter, such as:

This will be empty, ie PHP will return TRUE when using if empty() on the above.

So if your array has keys — either by eg a form’s input names or if you assign them manually (ie create an array with database column names as the keys but no values/data from the database), then the array will NOT be empty() .

In this case, you can loop the array in a foreach, testing if each key has a value. This is a good method if you need to run through the array anyway, perhaps checking the keys or sanitising data.

However it is not the best method if you simply need to know "if values exist" returns TRUE or FALSE. There are various methods to determine if an array has any values when it’s know it will have keys. A function or class might be the best approach, but as always it depends on your environment and exact requirements, as well as other things such as what you currently do with the array (if anything).

Читайте также:  Odbc строка подключения excel

Here’s an approach which uses very little code to check if an array has values:

Using array_filter() :
Iterates over each value in the array passing them to the callback function. If the callback function returns true, the current value from array is returned into the result array. Array keys are preserved.

Running array_filter() on all three example arrays (created in the first code block in this answer) results in the following:

$arraytwo is not empty

$arraythree is empty

So when there are no values, whether there are keys or not, using array_filter() to create a new array and then check if the new array is empty shows if there were any values in the original array.
It is not ideal and a bit messy, but if you have a huge array and don’t need to loop through it for any other reason, then this is the simplest in terms of code needed.

I’m not experienced in checking overheads, but it would be good to know the differences between using array_filter() and foreach checking if a value is found.

Obviously benchmark would need to be on various parameters, on small and large arrays and when there are values and not etc.

Ссылка на основную публикацию
Adblock detector