Как вернуть элемент массива, который найден по рекурсии?

Итак, у меня есть небольшая проблема:
У меня есть класс, давайте назовем его «Меню», также у меня есть массив, который предоставляет элементы для «Меню», это выглядит так

class Menu {
private $_data = [];
public function __construct() {
$this->_data = array(
"Parent1" => array(
"Child1" => array(
"id" => 1,
"minQuantity" => x,
"maxQuantity" => x,
"cost" => x,
),
"Child2"...
),
"ParentX" => array(
"ChildXX"...
)
/* AND SO ON */
);
}
}

Кроме того, в «Меню» у меня есть функция, которая путем рекурсии пытается найти элемент данных $ this -> _ с указанным значением, функция выглядит так:

public function findChildById($parent = null, $id = null) {
foreach ($parent as $_parent => $_child) {
if (array_key_exists($id, $parent)) var_dump($parent);
if (is_array($_child)) $this->findChildById($_child, $id);
}
}

Но когда он находит нужный элемент, и я пытаюсь его вернуть — результат всегда равен NULL. Использование var_dump приводит к очевидному выводу, я вижу, что именно мне нужно, но я не могу вернуть элемент из функции. Что я должен делать?

0

Решение

Поскольку вы пытаетесь найти только один элемент, этого должно быть достаточно для передачи возвращаемого значения в стек рекурсии. Например. как это:

public function findChildById($parent = null, $id = null) {
foreach ($parent as $_parent => $_child) {
if (array_key_exists($id, $parent)) return $parent; //first return
if (is_array($_child)) {
$tmp = $this->findChildById($_child, $id);
if (!is_null($tmp)) return $tmp; //if a deeper step found sth. pass it up
}
}
}

Причина получения значений NULL должна быть в том, что функции PHP возвращают NULL неявно, когда код не достигает оператора возврата.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector