Nano Hash - криптовалюты, майнинг, программирование

Count () возвращает 1 со строкой, разделенной запятой, с взрывом

У меня есть поле, в котором хранятся теги, разделенные запятой. Я пытаюсь подсчитать количество перечисленных предметов.

Допустим, я уже вытащил данные из БД, и в переменной $tags есть следующая информация:

$tags = "Videos,Magazines,Store";

// First separate tags by commas, put into into array
$tagArray = explode(",",$tags);

// Count how many items are in the array
$arrayCount = count($tagArray);

Это всегда возвращает «1», независимо от того, есть ли элемент в массиве или нет. переменная $tags может иметь любое количество элементов — от пустого до одного элемента, такого как «Видео», до нескольких элементов «Видео, игры, магазин» и т. д.

Может ли кто-нибудь помочь мне в том, что я делаю неправильно?

06.09.2011

  • Возвращает 3 для меня. Вы случайно вызываете count() исходную строку? 06.09.2011
  • Не воспроизводимо. Пожалуйста, опубликуйте свой реальный код. (Возможно, избегайте имен переменных в смешанном регистре.) 06.09.2011
  • Проблема с кодировкой? Ваши запятые не запятые? 06.09.2011
  • Точный код, который вы нам дали, верен codepad.org/GnU9hoxI 06.09.2011
  • Спасибо. Вы, ребята, были правы, проблема была не в этом коде, а в том, как я его использовал позже. 06.09.2011

Ответы:


1

Из руководства по PHP:

Если разделитель содержит значение, не содержащееся в строке, и используется отрицательный предел, то будет возвращен пустой массив, в противном случае будет возвращен массив, содержащий строку.

Итак, просто - если разделитель не найден в строке, взорвать ничего не сделать. Если ваша переменная содержит пустую строку, count() вернет 1. Вам нужно значение NULL для возврата count() 0.

Попробуй это:

    $tags = "Videos,Magazines,Store";

    // First separate tags by commas, put into into array
$tagArray = ($tags != '')?explode(",",$tags):NULL; // Count how many items are in the array
$arrayCount = count($tagArray);
10.04.2014
  • Подсчет на NULL генерирует предупреждение. Вместо этого используйте массив() 05.02.2020

  • 2

    Ваш код работает нормально, он возвращает 3, как и ожидалось, потому что вы предоставили правильную строку ввода для работы кода, но возникают проблемы, когда вы назначаете значение поля базы данных для $tags, потому что он также может содержать пустую строку, как вы сказали в своем вопросе.

    так что, как вы сказали, в поле db может быть ноль или более нуля тегов, поэтому, когда $tags не содержит тегов или пустой строки, тогда как php explode() говорится:

    Если разделитель содержит значение, не содержащееся в строке, то будет возвращен массив, содержащий строку типа [ " " ].

    Поэтому, когда ваш $tags содержит пустую строку, тогда explode() возвращает массив, содержащий пустую строку, так что теперь ваш $tagArray=[""], после взрыва, вы используете функцию count(), так что согласно руководство php по count() Это

    Возвращает количество элементов в 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.
    
    25.10.2018
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..