За последние 24 часа нас посетили 22525 программистов и 1189 роботов. Сейчас ищут 769 программистов ...

Слишком длинная строка

Тема в разделе "PHP для новичков", создана пользователем andre2017, 10 авг 2017.

  1. andre2017

    andre2017 Новичок

    С нами с:
    3 авг 2017
    Сообщения:
    67
    Симпатии:
    2
    Прошу подсказать, что делать, если строка (поле) для сравнения в асс.массиве слишком длинная.

    Работает:
    $dohod = "Доходные вложения в материальные ценности";
    foreach($data->$bbalans->$activ->$vneob->$dohod as $year =>$summa){echo '$summa';}

    Не работает:
    $nalog = "Налог на добавленную стоимость по приобретенным ценностям";
    foreach($data->$bbalans->$activ->$vneob->$nalog as $year =>$summa){echo '$summa';}

    Warning: Invalid argument supplied for foreach()

    Поля приходят в JSONе (кириллические и длинные) и их я изменять не могу).

    Вопрос: как проверять лишь начало строки на первые 40 символов?
     
  2. teleoperator

    teleoperator Зэк
    [ БАН ]

    С нами с:
    3 июл 2017
    Сообщения:
    107
    Симпатии:
    29
    для работы с josn есть опупительный класс JSONQ "PHP JSON Query: Query JSON data to find and extract information"
     
    andre2017 нравится это.
  3. andre2017

    andre2017 Новичок

    С нами с:
    3 авг 2017
    Сообщения:
    67
    Симпатии:
    2
    спасибо, посмотрю... а все таки, есть же какие то средства работы со строками, чтобы проверять на первые 40 символов...? рег. выражения и проч...
     
  4. teleoperator

    teleoperator Зэк
    [ БАН ]

    С нами с:
    3 июл 2017
    Сообщения:
    107
    Симпатии:
    29
    функция strpos()
     
  5. Познающий php

    Познающий php Новичок

    С нами с:
    23 мар 2017
    Сообщения:
    381
    Симпатии:
    74
    ммм а с чего ты решил что она слишком длинная? Ошибка говорит, что ты пытаешься обратиться к недействительному аргументу.

    Ты просто возможно где-то ошибся в имени

    Но скорей всего ты не соблюдаешь иерархию, ибо с каких пор ндс по ценностям относят к внеоборотным активам? :eek:
     
    andre2017 и Maputo нравится это.
  6. andre2017

    andre2017 Новичок

    С нами с:
    3 авг 2017
    Сообщения:
    67
    Симпатии:
    2
    а все легко проверить... вот ОЫЩТ и в нем все видно... и иерархию и ценности, щас проверим:

    "[data] => stdClass Object ( [Бухгалтерский баланс] => stdClass Object ( [Актив] => stdClass Object ( [I. ВНЕОБОРОТНЫЕ АКТИВЫ] => stdClass Object ( [Нематериальные активы] => stdClass Object ( [2015] => 101459000 [2014] => 12866000 [2013] => 3650000 [2012] => 4250000 [2011] => 956238990000 ) [Основные средства] => stdClass Object ( [2015] => 1084316376000 [2014] => 1063007530000 [2013] => 1003457628000 [2012] => 973476843000 [2011] => 956238990000 ) [Доходные вложения в материальные ценности] => stdClass Object ( [2015] => 0 [2014] => 0 [2013] => 0 [2012] => 0 [2011] => 0 ) [Финансовые вложения] => stdClass Object ( [2015] => 55174000 [2014] => 55174000 [2013] => 37157000 [2012] => 14562000 [2011] => 885000 ) [Отложенные налоговые активы] => stdClass Object ( [2015] => 1124245000 [2014] => 1074915000 [2013] => 936948000 [2012] => 812136000 [2011] => 584255000 ) [Прочие внеоборотные активы] => stdClass Object ( [2015] => 300133000 [2014] => 431445000 [2013] => 195277886000 [2012] => 110015536000 [2011] => 36774957000 ) [ИТОГО по разделу I] => stdClass Object ( [2015] => 1501878230000 [2014] => 1386703749000 [2013] => 1199713269000 [2012] => 1084323327000 [2011] => 993603963000 ) ) [II. ОБОРОТНЫЕ АКТИВЫ] => stdClass Object ( [Запасы] => stdClass Object ( [2015] => 3030699000 [2014] => 2831232000 [2013] => 2590596000 [2012] => 1483739000 [2011] => 1192448000 ) [Налог на добавленную стоимость по приобретенным ценностям] "

    Точно! Поторопился ночью и забежал вперед. вот правильная иеархия:
    foreach($data->$bbalans->$activ->$oborot->$nalog as $year =>$summa)

    Спасибо большое за подсказку!!! А то бы щас со строками возился...
     
  7. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.752
    Симпатии:
    1.322
    Адрес:
    Лень
    PHP:
    1. echo implode ( '<br>', $data->$bbalans->$activ->$oborot->$nalog );
    --- Добавлено ---
    интересно что быстрее foreach(values) or implode(values)
     
    andre2017 нравится это.
  8. andre2017

    andre2017 Новичок

    С нами с:
    3 авг 2017
    Сообщения:
    67
    Симпатии:
    2
    А как путь короче сделать?
    $path= "$data->$bbalans->$activ->$VNEOB";
    foreach($path->$nemat - Ошибка
     
  9. Dron-Boy

    Dron-Boy Старожил

    С нами с:
    20 ноя 2014
    Сообщения:
    1.041
    Симпатии:
    126
    Попробуй без кавычек.
    PHP:
    1. $path= $data->$bbalans->$activ->$VNEOB;
     
    andre2017 нравится это.