Return в рекурсивной функции

Добрый день всем.
Подскажите почему не отрабатывает return в мой функции ??
Он всегда присылает NULL. Сама функция работает так как надо , но НЕ возвращает результат.
Мне в принципе без разницы какой результат , можно например цифру 1 вернуть, т.е. что бы знать что нашлось то что искалось.

PHP:
  1. public static function getXmlDecompose($xml_data)
  2.         {
  3.             $session = Yii::$app->session;
  4.      
  5.             $cid = $session->get(‘position’) ? $session->get(‘position’)[0] : null; // id компании
  6.      
  7.             $companyInn = Company::getCompanyINN($cid);
  8.          
  9.             foreach ($xml_data as $property) {
  10.                 if ($property == $companyInn) {
  11.                     return self::getXmlDecompose($xml_data); // здесь нужно что то вернуть, например 1, но всегда NULL
  12.                 }else{
  13.                     $xml_data = $property;
  14.                     self:: getXmlDecompose($xml_data);
  15.                 }
  16.             }
  17.         }

Уточняю, $xml_data это массив в котором ищется ИНН компании путем перебирания.

 

бред какой-то
если перебор — не надо никакой рекурсии
а вообще для работы с XML давно и успешно используют всякие XPath и другие инструменты

Если прям уперлись в свое решение — для начала поясните — какую структуру имеет $xml_data, какой атрибут ищете, или свойств итд

ну так и верните

PHP:
  1. 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):
  1. <Data>
  2. <Company>
  3. <UUID>1234567890d</UUID>
  4. <INN>1234567890</INN>
  5. <KPP>773860001</KPP>
  6. <Description_RUS>ПCR</Description_RUS>
  7. <Description_ENG>ENetherlands</Description_ENG>
  8. <Country_RUS>Россия</Country_RUS>
  9. <SchedulesList>
  10. <ScheduleInfo>
  11. <ScheduleID>696fdc37-6d1e-11eb-80c4-4cedfb6c4a8f</ScheduleID>
  12. <ScheduleName>5 дней в неделю по 8ч</ScheduleName>
  13. <YearInfo>
  14. <Year>2022</Year>
  15. <MonthInfo>
  16. <Month>1</Month>
  17. <Date>2022-01-10</Date>
  18. <Hours>8</Hours>
  19. <DayWeek>1</DayWeek>
  20. <Date>2022-01-11</Date>
  21. <Hours>8</Hours>
  22. <DayWeek>2</DayWeek>
  23. <Date>2022-01-12</Date>
  24. <Hours>8</Hours>
  25. <DayWeek>3</DayWeek>
  26. <Date>2022-01-13</Date>
  27. <Hours>8</Hours>
  28. <DayWeek>4</DayWeek>
  29. <Date>2022-01-14</Date>
  30. <Hours>8</Hours>
  31. <DayWeek>5</DayWeek>
  32. <Date>2022-01-17</Date>
  33. <Hours>8</Hours>
  34. <DayWeek>1</DayWeek>

— Добавлено —
Здесь не отабаражаются уровни вложенности, но на самом деле только в представленном мной куске их 5
— Добавлено —

Это первое что я попробовал. Не возвращает 1 , возвращает NULL. При этом если написать return var_damp(1) то выводит на экран 1, но эту единичку не видно никак в контроллере откуда я вызываю эту функцию и где я жду от нее ответа в виде 1.
— Добавлено —

PHP:
  1.  public static function getXmlDecompose($xml_data)
  2.         {
  3.             $session = Yii::$app->session;
  4.      
  5.             $cid = $session->get(‘position’) ? $session->get(‘position’)[0] : null; // id компании
  6.      
  7.             $companyInn = Company::getCompanyINN($cid);
  8.          
  9.             foreach ($xml_data as $property) {
  10.                 if ($property != $companyInn) {
  11.                     self:: getXmlDecompose($property);
  12.                 }elseif($property == $companyInn){
  13.                     return 1; // должна прилететь единица, но прилетfет NULL
  14.                 }else{
  15.                     return null;
  16.                 }
  17.             }
  18.          
  19.         }

— Добавлено —
При чем абсалютно без разницы что я нипишу в return всё равно функция возвратит через этот return NULL и только если вывезти на экран через var_damp будет видно что вернула return. Вот такая вот загадка. Пробовал и массивы и объекты и просто текст , ничего не возварщается, только NULL и все тут.
— Добавлено —

PHP:
  1. $xml = CycleFile::getXmlDecompose($xml_data);

Вот так в контроллере в $xml должна быть либо 1 либо null, но там всегда null даже когда туда возвращается 1
— Добавлено —
При чем если со стороны контроллера написать
return var_dump($xml); то все равно NULL выведит на экран, а если в самой функции написать return var_damp(1) то тогда выведет на экран (int)1. Я х.з всю голову уже сломал что не так .

 

если все-же у компании искать, то

PHP:
  1. $res = $xml_data->xpath(«//Company[INN=’1234567890′]»);

для любой сущность, в любом поле —

PHP:
  1. $res = $xml_data->xpath(«//*[*=’1234567890′]»);
 

Спасибо. Сейчас попробую.
— Добавлено —
Отлично. Если находит выдает массив (вложенный), где нашел. Не знал о такой функции, поэтому сам писал, мутил
СПАСИБО добрый человек.
У меня вопрос, а у Exel такое есть ???
Ну для PDF я нашел smalot/pdfparser пока не изучал его.

 

новые вопросы не по теме — задавайте в новых темах

 

Добрый день.

Можете подсказать
Почему

  1. $res = $xml_data->xpath(«//*[*=’1234567890′]»); ИНН ищет (набор цифр) а любое слово например Тест $res = $xml_data->xpath(«//*[*=’Тест’]»); не ищет, хотя оно есть в документе ??

— Добавлено —
Хотя я делаю все строго по документации https://www.php.net/manual/ru/simplexmlelement.xpath.php
— Добавлено —
Вопрос закрыт, нашел ошибку.

 

нашел ответ на свой вопрос — опубликуй его здесь… чтоб народ видел и не делал таких ошибок

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *