Добрый день всем.
Подскажите почему не отрабатывает return в мой функции ??
Он всегда присылает NULL. Сама функция работает так как надо , но НЕ возвращает результат.
Мне в принципе без разницы какой результат , можно например цифру 1 вернуть, т.е. что бы знать что нашлось то что искалось.PHP:
public static function getXmlDecompose($xml_data) { $session = Yii::$app->session; $cid = $session->get(‘position’) ? $session->get(‘position’)[0] : null; // id компании $companyInn = Company::getCompanyINN($cid); foreach ($xml_data as $property) { if ($property == $companyInn) { return self::getXmlDecompose($xml_data); // здесь нужно что то вернуть, например 1, но всегда NULL }else{ $xml_data = $property; self:: getXmlDecompose($xml_data); } } }Уточняю, $xml_data это массив в котором ищется ИНН компании путем перебирания.
бред какой-то
если перебор — не надо никакой рекурсии
а вообще для работы с XML давно и успешно используют всякие XPath и другие инструментыЕсли прям уперлись в свое решение — для начала поясните — какую структуру имеет $xml_data, какой атрибут ищете, или свойств итд
ну так и верните
PHP:
return 1; // здесь нужно
В $xml_data многоуровневый объект созданный таким способом
$xml = file_get_contents($url);
$xml_data = simplexml_load_string($xml); // XML объектТак как объект может содержать неизвестное количество вложенностей поэтому и использую рекурсивную функцию.
— Добавлено —
Функция работает как надо и ищет то что нужно в независимости от размера и уровня вложенностей объекта.
Вопрос в том как вернуть значение назад если что нашла ? return в упор ничего не возвращает кроме null
— Добавлено —
<Data>
<Company>
<UUID>1234567890d</UUID>
<INN>1234567890</INN>
<KPP>773860001</KPP>
<Description_RUS>ПCR</Description_RUS>
<Description_ENG>ENetherlands</Description_ENG>
<Country_RUS>Россия</Country_RUS>
<SchedulesList>
<ScheduleInfo>
<ScheduleID>696fdc37-6d1e-11eb-80c4-4cedfb6c4a8f</ScheduleID>
<ScheduleName>5 дней в неделю по 8ч</ScheduleName>
<YearInfo>
<Year>2022</Year>
<MonthInfo>
<Month>1</Month>
<Date>2022-01-10</Date>
<Hours>8</Hours>
<DayWeek>1</DayWeek>
<Date>2022-01-11</Date>
<Hours>8</Hours>
<DayWeek>2</DayWeek>
<Date>2022-01-12</Date>
<Hours>8</Hours>
<DayWeek>3</DayWeek>
<Date>2022-01-13</Date>
<Hours>8</Hours>
<DayWeek>4</DayWeek>
<Date>2022-01-14</Date>
<Hours>8</Hours>
<DayWeek>5</DayWeek>
<Date>2022-01-17</Date>
<Hours>8</Hours>
<DayWeek>1</DayWeek>Вот часть , нужно найти INN ( набор цифр ) который может быть в ЛЮБОМ месте и называться как угодно (не обязательно INN).
— Добавлено —Код (Text):
<Data> <Company> <UUID>1234567890d</UUID> <INN>1234567890</INN> <KPP>773860001</KPP> <Description_RUS>ПCR</Description_RUS> <Description_ENG>ENetherlands</Description_ENG> <Country_RUS>Россия</Country_RUS> <SchedulesList> <ScheduleInfo> <ScheduleID>696fdc37-6d1e-11eb-80c4-4cedfb6c4a8f</ScheduleID> <ScheduleName>5 дней в неделю по 8ч</ScheduleName> <YearInfo> <Year>2022</Year> <MonthInfo> <Month>1</Month> <Date>2022-01-10</Date> <Hours>8</Hours> <DayWeek>1</DayWeek> <Date>2022-01-11</Date> <Hours>8</Hours> <DayWeek>2</DayWeek> <Date>2022-01-12</Date> <Hours>8</Hours> <DayWeek>3</DayWeek> <Date>2022-01-13</Date> <Hours>8</Hours> <DayWeek>4</DayWeek> <Date>2022-01-14</Date> <Hours>8</Hours> <DayWeek>5</DayWeek> <Date>2022-01-17</Date> <Hours>8</Hours> <DayWeek>1</DayWeek>— Добавлено —
Здесь не отабаражаются уровни вложенности, но на самом деле только в представленном мной куске их 5
— Добавлено —Это первое что я попробовал. Не возвращает 1 , возвращает NULL. При этом если написать return var_damp(1) то выводит на экран 1, но эту единичку не видно никак в контроллере откуда я вызываю эту функцию и где я жду от нее ответа в виде 1.
— Добавлено —PHP:
public static function getXmlDecompose($xml_data) { $session = Yii::$app->session; $cid = $session->get(‘position’) ? $session->get(‘position’)[0] : null; // id компании $companyInn = Company::getCompanyINN($cid); foreach ($xml_data as $property) { if ($property != $companyInn) { self:: getXmlDecompose($property); }elseif($property == $companyInn){ return 1; // должна прилететь единица, но прилетfет NULL }else{ return null; } } }— Добавлено —
При чем абсалютно без разницы что я нипишу в return всё равно функция возвратит через этот return NULL и только если вывезти на экран через var_damp будет видно что вернула return. Вот такая вот загадка. Пробовал и массивы и объекты и просто текст , ничего не возварщается, только NULL и все тут.
— Добавлено —PHP:
$xml = CycleFile::getXmlDecompose($xml_data);Вот так в контроллере в $xml должна быть либо 1 либо null, но там всегда null даже когда туда возвращается 1
— Добавлено —
При чем если со стороны контроллера написать
return var_dump($xml); то все равно NULL выведит на экран, а если в самой функции написать return var_damp(1) то тогда выведет на экран (int)1. Я х.з всю голову уже сломал что не так .
если все-же у компании искать, то
PHP:
$res = $xml_data->xpath(«//Company[INN=’1234567890′]»);для любой сущность, в любом поле —
PHP:
$res = $xml_data->xpath(«//*[*=’1234567890′]»);
Спасибо. Сейчас попробую.
— Добавлено —
Отлично. Если находит выдает массив (вложенный), где нашел. Не знал о такой функции, поэтому сам писал, мутил
СПАСИБО добрый человек.
У меня вопрос, а у Exel такое есть ???
Ну для PDF я нашел smalot/pdfparser пока не изучал его.
новые вопросы не по теме — задавайте в новых темах
Добрый день.
Можете подсказать
Почему
- $res = $xml_data->xpath(«//*[*=’1234567890′]»); ИНН ищет (набор цифр) а любое слово например Тест $res = $xml_data->xpath(«//*[*=’Тест’]»); не ищет, хотя оно есть в документе ??
— Добавлено —
Хотя я делаю все строго по документации https://www.php.net/manual/ru/simplexmlelement.xpath.php
— Добавлено —
Вопрос закрыт, нашел ошибку.
нашел ответ на свой вопрос — опубликуй его здесь… чтоб народ видел и не делал таких ошибок