@vinges
WEB Developer

Как работает этот PHP функция?

Объясните код, пожалуйста
protected function getTree()
{
$tree = [];
foreach ($this->data as $id => &$node) {
if (!$node['parent_id']) {
$tree[$id] = &$node;
}
else
$this->data[$node['parent_id']]['childs'][$node['id']] = &$node;
}
return $tree;
}
  • Вопрос задан
  • 622 просмотра
Решения вопроса 1
gromdron
@gromdron
Работаю с Bitrix24
Функция (а точнее метод класса) getTree работает следующим образом:
Она поэлементно обрабатывает массив (или ArrayIterator) расположенный в $this->data
Если в рассматриваемом элементе массива, есть нет ключа parent_id (или он эквивалентен false), то он добавляется на первый уровень массива $tree (родительский элемент)
Иначе - он добавляется в элемент childs соответствующему родителю (если он конечно есть)

Рассмотрим ситуацию, когда у нас в $this->data находится следующее значение:

array(
	1 => array(
		name      => test1,
		parent_id => 0
	),
	2 => array(
		name      => test2,
		parent_id => 1
	),
	3 => array(
		name      => test3,
		parent_id => 1
	),
)


Таким образом пропуская его через эту функцию на выходе будет:

array(
	1 => array(
		name => test1,
		parent_id => 0,
		childs => array(
			2 => array(
				name      => test2,
				parent_id => 1
			),
			3 => array(
				name      => test3,
				parent_id => 1
			),
		)
	)
)


А вот если предположить что входной массив был другим, например:

array(
	2 => array(
		name      => test2,
		parent_id => 1
	),
	1 => array(
		name      => test1,
		parent_id => 0
	),
	3 => array(
		name      => test3,
		parent_id => 1
	),
)


То на выходе будет соответственно:

array(
	1 => array(
		name => test1,
		parent_id => 0,
		childs => array(
			3 => array(
				name      => test3,
				parent_id => 1
			),
		)
	)
)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы