Добрый день всем. Подскажите почему не отрабатывает 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 --- Добавлено --- Вопрос закрыт, нашел ошибку.