Я недавно обновился до PHP 7.2, и я запускаю какой-то старый устаревший код для глупой системы учета. По сути, он содержит массивtest_id и записи для каждого конкурса.
/*
@Use: Adds entries into the active contest for a given member.
@Param: $user_id - INT
@Param: $entries - INT
*/
function add_vip_entries($user_id, $entries) {
$user_data = get_user_meta( $user_id, 'all_contests', true );
$contest_id = get_active_contest();
if ($contest_id !== 0) {
if (isset($user_data['all_contests'][$contest_id]['entries'])) {
$user_data['all_contests'][$contest_id]['entries'] = intval($user_data['all_contests'][$contest_id]['entries'] + $entries);
} else {
$user_data['all_contests'][$contest_id]['entries'] = $entries;
}
update_user_meta( $user_id, 'all_contests', $user_data );
}
}
Раньше это работало нормально, но теперь, если пользователь впервые получает записи для данного соревнования, я получаю следующую ошибку.
Неполученное исключение «Ошибка» с сообщением «Невозможно использовать строковое смещение в качестве массива '
И он срабатывает на этой точной строке:
$user_data['all_contests'][$contest_id]['entries'] = $entries;
Как можно воспроизвести поведение, которое было в PHP7 .0 ? Раньше просто pu sh создавал структуру данных или, если это был новый конкурс, pu sh новый идентификатор конкурса и набор записей. Теперь это ошибки. Я попытался отредактировать этот
$user_data = array('all_contests' => array($contest_id => array('entries' => $entries)));
Но это вызывает проблему, когда при введении нового идентификатора конкурса будет установлена структура данных, содержащая только идентификатор конкурса и входную пару. комплект.