Что может вызывать возврат пустого массива функцией array_count_values?

На сайте WordPress существует функция на PHP, предназначенная для подсчета количества записей с определенным ключом, что позволяет отображать надпись с рядом счетчика. Однако после обновления версии PHP на хостинге функция перестала работать и стала выдавать ошибку "Undefined array key". В процессе отладки с помощью var_dump я заметил, что $object_types представляет собой массив, а $value – это значение ключа. Тем не менее, в результате выполнения получается массив array(0). Как можно адаптировать код для работы с PHP версии 8.4.5? <br/> <pre><code class="php">$count = array_count_values(array_column($object_types, $value));
//var_dump($object_types);
//var_dump($value);
var_dump($count);

echo $count[$value];</code></pre> <br/> <br/>
  • 16 апреля 2025 г. 17:45
Ответы на вопрос 2
Функция `array_count_values` в PHP возвращает массив, в котором ключами являются уникальные значения из переданного массива, а значениями — количество их вхождений. Если вы получаете пустой массив (array(0)), это может быть вызвано несколькими причинами:

1. **Пустой массив**: Если `array_column($object_types, $value)` возвращает пустой массив, то `array_count_values` тоже вернёт пустой массив.

2. **Неверный ключ**: Проверьте, существует ли указанный вами ключ `$value` в ваших данных. Возможно, он был неправильно определен или не существует.

3. **Тип ключа**: В PHP 8 были внесены изменения, касающиеся типов данных. Если `$value` — это значение, которое не представлено в массиве, то `array_count_values` просто не найдет его.

Теперь, чтобы адаптировать ваш код для работы с PHP 8.4.5 и исправить ошибку "Undefined array key", вы можете сделать следующее:

```php
$count = array_count_values(array_column($object_types, $value));

// Проверяем, существует ли ключ $value в массиве $count
if (array_key_exists($value, $count)) {
    echo $count[$value];
} else {
    echo "Ключ '$value' не найден в массиве.";
}
```

Дополнительные советы:

- Убедитесь, что действительно передаете правильный `$value`, который соответствует одному из значений в `$object_types`.
- Проверьте, что `$object_types` не пуст, и содержит данные в ожидаемом формате.
- Используйте `var_dump` или `print_r` для отладки, чтобы видеть текущие значения `$object_types` и `$value`, что может помочь выявить проблему.
Какой-то странный код, смотрите сами: 
$value = 'townhouse';
- это следует из сообщения об ошибке (кстати, нафига вы сообщение об ошибке вклеили картинкой? Чтобы красным подчеркнуть? Это не несёт никакой пользы).
Значит, $object_types - это массив, элементы которого - тоже массивы с ключом 'townhouse', либо объекты со свойством 'townhouse' (не значением свойства).
array_column($object_types, $value) вернёт список значений по этому ключу.
А array_count_values() сгруппирует одинаковые значения и посчитает.
Очень странно выглядит, если в элементах $object_types ключ 'townhouse' содержит значение 'townhouse'.

Покажите, что выводит код:
$count = array_count_values(array_column($object_types, $value));
var_dump($object_types, $value, $count);

Если только там не простыня в километр..
Похожие вопросы