Подскажите пожалуйста как исправить ошибку: trim(): Argument #1 ($string) must be of type string, array given (0) Код (Text): while($ob = $res->GetNext()) { if($ob['TAGS']){ $arTag = explode(',',$ob['TAGS']); if(!$arTag[1]){ $arTag[] = $arTag; } print_r ($arTag); foreach($arTag as $tag2){ $arTags[trim($tag2)] = trim($tag2); $ob["TAGS2"][trim($tag2)] = trim($tag2); } } if(!$ob["PROPERTY_POPULAR_VALUE"]){ $arResultNew[] = $ob; }else{ $arResultPopular[] = $ob; } if($_REQUEST['all'] == 1 || $_REQUEST['q']){ $arResultAll[] = $ob; } } ошибка в этих строках: $arTags[trim($tag2)] = trim($tag2); $ob["TAGS2"][trim($tag2)] = trim($tag2); Как я понимаю обрабатывается массив,а требуется чтобы была строка. Но как это исправить пока не додумался.
Переписал ! Заработало ! Как я понимаю я сделал всё верно &_ Код (Text): if($arTag[1] == 'false'){ $arTag[] = $arTag; }
вообще странная проверка. типа , если в массиве есть элемент с индексом 1, то тогда не выполнять эту функцию. Это я верно понимаю ?)
Добрый день! Вы правы, очень странная проверка и не только... Если в массиве нет элемент с индексом 1, то PHP8.2 выдал бы: Warning: Undefined array key 1 in ... но он у Вас есть, но значение пусто. PHP: <? $ob['TAGS']="a,,c"; // например $arTag = explode(',',$ob['TAGS']); if(!$arTag[1]){ $arTag[] = $arTag; } echo "<pre>"; print_r($arTag); /* Array $arTag ( [0] => a [1] => [2] => c [3] => Array ( [0] => a [1] => [2] => c ) ) */ ?> После этой странной затеи получается многомерный массив и на последнем ключе здесь PHP: foreach($arTag as $tag2){ $arTags[trim($tag2)] = trim($tag2); $ob["TAGS2"][trim($tag2)] = trim($tag2); } foreach возвращает в $tag2 не строку, как хотелось бы, а массив. И поэтому выдаётся ошибка. Между прочим, если бы не было trim возникла бы ошибка из-за индекса массива т.к. это должно быть целое число или строка. Удачи!
обойти все элементы массива и применить к ним trim: array_walk_recursive($arTags, fn(&$x) => $x = trim($x))