Ваш код работает нормально, он возвращает 3, как и ожидалось, потому что вы предоставили правильный ввод строку для работы кода, но проблема возникает, когда вы присваиваете значение поля базы данных для $tags
, поскольку он также может содержать пустую строку , как вы сказали в своем вопросе.
так как вы сказали, что это может быть ноль или больше нуля тегов в поле дБ, поэтому, когда $tags
не содержит тегов или пустую строку, тогда как php explode () руководство функции говорит:
Если разделитель содержит значение, которое не содержится в строке, будет возвращен массив , содержащий строку типа [""] .
Итак, когда ваш $tags
содержит пустую строку , тогда explode()
возвращает массив , содержащий пустую строку , так что теперь ваш $tagArray=[""]
, после взрыва вы используете функцию count()
, так же как php руководство count () It
Возвращает количество элементов в array_or_countable. Если параметр не является ни массивом, ни объектом с реализованным интерфейсом Countable, будет возвращено 1 . Есть одно исключение: если array_or_countable равен NULL, будет возвращено 0 .
, потому что ваш $tagArray
равен не NULL, а $tagArray=[""]
, поэтому count($tagArray)
возвращает единицу.
Так что для ее решения используйте код ниже:
$tags = "Videos,Magazines,Store";
// it can also contains empty string like $tags = ""
$arrayCount = ($tags)?count(explode(",",$tags)):0;
//here $arrayCount will have 3 as expected, But if your $tags contains empty string it will return 0 instead of 1.