За последние 24 часа нас посетили 20324 программиста и 1082 робота. Сейчас ищут 745 программистов ...

Битый utf8 внутри foreach.

Тема в разделе "PHP для новичков", создана пользователем doko, 8 июн 2019.

Метки:
  1. doko

    doko Новичок

    С нами с:
    8 июн 2019
    Сообщения:
    3
    Симпатии:
    1
    Привет люди.
    Я давно уже не из разряда новичков. Написал тонну кода за свою жизнь. Но тут я уже сломал голову.
    Код представлен в упрощенном виде
    PHP:
    1. $res=file_get_contents('data.txt');
    2. $res=json_decode($res, true, JSON_UNESCAPED_UNICODE);
    3.  
    4. foreach($res as $k => $v){
    5.         $a=get_first_func($v['main_name']);    
    6.         echo $v['add_name'];         //     отображает корректно
    7.         $test_var=$v['add_name'];     //    для теста
    8.         // a[1]['collect']=array(0,1,2,3,4,5);
    9.         foreach($a[1]['collect'] as $k1 => $v1){
    10.             echo $v['add_name'];     //     пусто
    11.             echo $test_var;         //    пусто
    12.             echo $v['second_param'];     //    отображает корректно
    13.             //    $a[1] массив присутствует как и запланировано
    14.         }
    15.         echo $v['add_name'];        //     отображает корректно
    16.         echo $test_var;             //     отображает корректно
    17. }
    Замечу, что данная проблема исключительно для некоторых add_name в документе json.
    Документ был записан с
    PHP:
    1. $json=json_encode($res, JSON_UNESCAPED_UNICODE);
    PHP около версии 5.4
    Выходит, что проблема в utf-8? Первый раз такое встречается на моей памяти, что внутри foreach переменная теряет свое значение. Причем замечу, что за пределами (после) foreach переменная вполне себе со значением.
    PS размер строки не более 30 символов (string).
    PSS Попробую сервер перезагрузить, конечно, но полагаю, что проблема вовсе не решится.
    Буду признателен за мысли.
    Всем добра и уважения.
     
    #1 doko, 8 июн 2019
    Последнее редактирование: 8 июн 2019
  2. doko

    doko Новичок

    С нами с:
    8 июн 2019
    Сообщения:
    3
    Симпатии:
    1
    Если раскомментировать строку
    Код (Text):
    1. $a[1]['collect']=array(0,1,2,3,4,5);
    .. то $v['add_name'] внутри foreach появляется. Бред какой-то.
     
  3. doko

    doko Новичок

    С нами с:
    8 июн 2019
    Сообщения:
    3
    Симпатии:
    1
    Ну вот... долбил 3 часа проблему, а все дело оказалось в пустом поле документа =)
    Никакой фантастики.. банальная усталость.
     
    MouseZver нравится это.
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    это всегда так. Лимонишь неделями, а потом лампа над головой
     
    doko нравится это.