count (array) возвращает 1, но массив пуст

$cartProducts = explode(',', $prodID);
echo count($cartProducts) 

Вывод var_dump ($ cartProducts); является:

'array(1) { [0]=> string(0) "" } 

Это дает мне значение $ count 1, но массив пуст, или, по крайней мере, мой столбец базы данных пуст.

Я пробовал следующее:

if(empty($cartProducts)){
echo '0';
} else{
$count = count($cartProducts);
}

Но я получаю тот же результат: $ count = 1

Боже, что мне здесь не хватает?

Ответ 1

Вы можете использовать array_filter():

echo count(array_filter($cartProducts, 'strlen'));

Он использует strlen() чтобы решить, является ли элемент массива "пустым"; без второго аргумента array_filter он будет относиться к '0' как пустой.

Даже лучше

Использование array_filter() довольно общее; в вашем случае, если $prodID - пустая строка, лучше сначала проверить strlen($prodId), например:

echo strlen($prodId) ? count(explode(',', $prodId)) : 0;

Ответ 2

Массив не пуст. Он имеет один элемент, который содержит строку длиной 0.

count(array_filter($array));

Вам не нужно передавать второй параметр array_filter() потому что пустая строка будет оцениваться как false (и, следовательно, будет удалена).

Ответ 3

Ваш if/else улавливает неправильную переменную. Вы должны проверить $prodId:

if($prodID === ''){
    $count = 0;
} else{
    $count = count(explode(',', $prodID));
}

explode() гарантированно возвращает массив, состоящий из строк, поэтому в основном он работает так же, как рекламируется, что хорошо.

Ответ 4

Вы можете написать свой код следующим образом:

$cartProducts = strlen($prodID) ? explode(",", $prodID) : array();
echo count($cartProducts);

Ответ 5

Вы можете использовать preg_split с флагом PREG_SPLIT_NO_EMPTY. Таким образом, вы не получите пустые строки:

$cartProducts = preg_split("/,/", $prodID, NULL, PREG_SPLIT_NO_EMPTY);