За последние 24 часа нас посетили 37985 программистов и 8304 робота. Сейчас ищет 1921 программист ...

Ошибка php 8.2 в функции trim

Тема в разделе "PHP для новичков", создана пользователем morgusha, 16 окт 2023.

  1. morgusha

    morgusha Активный пользователь

    С нами с:
    25 июн 2020
    Сообщения:
    7
    Симпатии:
    0
    Подскажите пожалуйста как исправить ошибку:
    trim(): Argument #1 ($string) must be of type string, array given (0)

    Код (Text):
    1. while($ob = $res->GetNext()) {
    2.     if($ob['TAGS']){
    3.         $arTag = explode(',',$ob['TAGS']);
    4.         if(!$arTag[1]){
    5.             $arTag[] = $arTag;
    6.         }
    7.         print_r ($arTag);
    8.         foreach($arTag as $tag2){
    9.             $arTags[trim($tag2)] = trim($tag2);
    10.             $ob["TAGS2"][trim($tag2)] = trim($tag2);
    11.         }
    12.     }
    13.     if(!$ob["PROPERTY_POPULAR_VALUE"]){
    14.         $arResultNew[] = $ob;
    15.     }else{
    16.         $arResultPopular[] = $ob;
    17.     }
    18.     if($_REQUEST['all'] == 1 || $_REQUEST['q']){
    19.         $arResultAll[] = $ob;
    20.     }
    21. }
    ошибка в этих строках:
    $arTags[trim($tag2)] = trim($tag2);
    $ob["TAGS2"][trim($tag2)] = trim($tag2);
    Как я понимаю обрабатывается массив,а требуется чтобы была строка.
    Но как это исправить пока не додумался.
     
  2. Aleksandr.B

    Aleksandr.B Активный пользователь

    С нами с:
    2 фев 2023
    Сообщения:
    159
    Симпатии:
    41
    Адрес:
    Барнаул
    if(!$arTag[1]){
    $arTag[] = $arTag;
    }
    Удалить или переписать.
     
    morgusha нравится это.
  3. morgusha

    morgusha Активный пользователь

    С нами с:
    25 июн 2020
    Сообщения:
    7
    Симпатии:
    0
    Переписал ! Заработало ! Как я понимаю я сделал всё верно &_
    Код (Text):
    1.         if($arTag[1] == 'false'){
    2.             $arTag[] = $arTag;
    3.         }
     
  4. Aleksandr.B

    Aleksandr.B Активный пользователь

    С нами с:
    2 фев 2023
    Сообщения:
    159
    Симпатии:
    41
    Адрес:
    Барнаул
    Нет
     
  5. morgusha

    morgusha Активный пользователь

    С нами с:
    25 июн 2020
    Сообщения:
    7
    Симпатии:
    0
    хм ! круто ! А что выходит нужно массив переделывать в строку ?
     
  6. morgusha

    morgusha Активный пользователь

    С нами с:
    25 июн 2020
    Сообщения:
    7
    Симпатии:
    0
    вообще странная проверка. типа , если в массиве есть элемент с индексом 1, то тогда не выполнять эту функцию. Это я верно понимаю ?)
     
  7. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    485
    Симпатии:
    97
    Адрес:
    Бавария, Германия
    Добрый день!
    Вы правы, очень странная проверка и не только...
    Если в массиве нет элемент с индексом 1, то PHP8.2 выдал бы:
    Warning: Undefined array key 1 in ...
    но он у Вас есть, но значение пусто.
    PHP:
    1. <?
    2. $ob['TAGS']="a,,c"; // например
    3. $arTag = explode(',',$ob['TAGS']);
    4. if(!$arTag[1]){
    5.     $arTag[] = $arTag;
    6. }
    7. echo "<pre>";
    8. print_r($arTag);
    9. /*
    10. Array $arTag
    11. (
    12.     [0] => a
    13.     [1] =>
    14.     [2] => c
    15.     [3] => Array
    16.         (
    17.             [0] => a
    18.             [1] =>
    19.             [2] => c
    20.         )
    21.  
    22. )
    23. */
    24. ?>
    После этой странной затеи получается многомерный массив и на последнем ключе здесь
    PHP:
    1. foreach($arTag as $tag2){
    2.    $arTags[trim($tag2)] = trim($tag2);
    3.    $ob["TAGS2"][trim($tag2)] = trim($tag2);
    4. }
    foreach возвращает в $tag2 не строку, как хотелось бы, а массив.
    И поэтому выдаётся ошибка. Между прочим, если бы не было trim
    возникла бы ошибка из-за индекса массива т.к. это должно быть целое число или строка.

    Удачи!
     
    #7 Vladimir Kheifets, 16 окт 2023
    Последнее редактирование: 16 окт 2023
    morgusha нравится это.
  8. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.129
    Симпатии:
    1.223
    Адрес:
    там-сям
    обойти все элементы массива и применить к ним trim:
    array_walk_recursive($arTags, fn(&$x) => $x = trim($x))