@alexandreev1601

При переходе на php8 Битрикс как обойти ошибку [TypeError] Cannot access offset of type string on string (0)?

Добрый день! Помогите пожалуйста поправить ошибку, после перехода с 7 на 8 php некоторые страницы сайта показывают белый экран и выдают такую ошибку :
2024-02-19 09:39:29 - Host: perm.polimaks.ru:443 - UNCAUGHT_EXCEPTION - [TypeError]
Cannot access offset of type string on string (0)
/home/bitrix/www/services/.left.menu_ext.php:29
29 строчка:
if (!in_array($innerArrVal['LINK_REGION'], $key_array)) {

<?
if(!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die();
$aMenuLinksExt = array();

if($arMenuParametrs = CMax::GetDirMenuParametrs(__DIR__))
{
	$iblock_id = CMaxCache::$arIBlocks[SITE_ID]['aspro_max_content']['aspro_max_services'][0];
	$arExtParams = array(
		'IBLOCK_ID' => $iblock_id,
		'MENU_PARAMS' => $arMenuParametrs,
		'SECTION_FILTER' => array(),	// custom filter for sections (through array_merge)
		'SECTION_SELECT' => array(),	// custom select for sections (through array_merge)
		'ELEMENT_FILTER' => array(),	// custom filter for elements (through array_merge)
		'ELEMENT_SELECT' => array(),	// custom select for elements (through array_merge)
		'MENU_TYPE' => 'services',
	);
	CMax::getMenuChildsExt($arExtParams, $aMenuLinksExt);
}

$aMenuLinks = array_merge($aMenuLinks, $aMenuLinksExt);

$tmp = array();
$key_array = array(); 
$i = 0; 

foreach($aMenuLinks as $val) { 
	if(is_array($val) && count($val) > 0) {
		foreach($val as $innerArrVal) { 
			if (!in_array($innerArrVal['LINK_REGION'], $key_array)) { 
				$key_array[$i] = $innerArrVal['LINK_REGION']; 
				$tmp[$i] = $val; 
			} 
		}
	}
	$i++; 
} 
if(!empty($tmp))
	$aMenuLinks = $tmp;
?>
  • Вопрос задан
  • 61 просмотр
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
У вас в $innerArrVal записана строка и происходит попытка получить значение по строковому индексу 'LINK_REGION'. В PHP7 такая комбинация выдавала предупреждение и результатом был нулевой символ строки, в PHP8 это стало ошибкой.
Проверяйте, что у вас в $aMenuLinks, судя по коду там должен быть массив массивов асоциативных массивов.
Ответ написан
Комментировать
@alexandreev1601 Автор вопроса
Я совсем новичок в этом деле, где находится $aMenuLinks? Код на время весь закомментировал и сайт поднялся. Но это костыль. Но хотя бы так. Спасибо!
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы