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);