@isawillbenice

Как из массива категорий построить хлебные крошки?

Есть массив

$temp = array(
    array('id' => 5273, 'parent' => 0,    'name' => 'John Doe'),  
    array('id' => 6032, 'parent' => 5273, 'name' => 'Sally Smith'),
    array('id' => 6034, 'parent' => 6032, 'name' => 'Mike Jones'),
    array('id' => 6035, 'parent' => 6034, 'name' => 'Jason Williams'),
    array('id' => 6036, 'parent' => 5273, 'name' => 'Sara Johnson'),
    array('id' => 6037, 'parent' => 5273, 'name' => 'Dave Wilson'),
    array('id' => 6038, 'parent' => 6037, 'name' => 'Amy Martin')
);


Хочу получить следующее

$temp = array(
    array('id' => 5273,  'name' => 'John Doe'),  
    array('id' => 6032, 'name' => 'John Doe -> Sally Smith'),
    array('id' => 6034,  'name' => 'John Doe -> Sally Smith -> Mike Jones'),
    array('id' => 6035,  'name' => 'Jason Williams'),
    array('id' => 6036, 'name' => 'Jason Williams -> Sara Johnson'),
    array('id' => 6037,  'name' => 'Jason Williams -> Dave Wilson'),
    array('id' => 6038,  'name' => 'Jason Williams -> Sara Johnson -> Amy Martin')
);


То есть чтоб потом пройтись по результату и вывести это в select или в хлебную крошку.
  • Вопрос задан
  • 2865 просмотров
Решения вопроса 1
@developinwed
<?php
$temp = array(
    array('id' => 5273, 'parent' => 0,    'name' => 'John Doe'),  
    array('id' => 6032, 'parent' => 5273, 'name' => 'Sally Smith'),
    array('id' => 6034, 'parent' => 6032, 'name' => 'Mike Jones'),
    array('id' => 6035, 'parent' => 6034, 'name' => 'Jason Williams'),
    array('id' => 6036, 'parent' => 5273, 'name' => 'Sara Johnson'),
    array('id' => 6037, 'parent' => 5273, 'name' => 'Dave Wilson'),
    array('id' => 6038, 'parent' => 6037, 'name' => 'Amy Martin')
);

function getBreadcrumbsArray($temp)
{
	foreach ($temp as $item) {
		$temp_i[$item['id']] = array(
			'parent' => $item['parent'],
			'name' => $item['name'],
		);
	}

	foreach ($temp as $item) {
		$breadcrumbs[] = array(
			'id' => $item['id'],
			'name' => implode(' -> ', getBreadcrumbs($temp_i, $item['id']))
		);
	}

	return $breadcrumbs;
}


function getBreadcrumbs($data_array, $id, $breadcrumbs = array())
{
	$breadcrumbs[] = $data_array[$id]['name'];

	if( $data_array[$id]['parent'] == 0 )
	{
		return array_reverse($breadcrumbs);
	}
	else
	{
		return getBreadcrumbs($data_array, $data_array[$id]['parent'], $breadcrumbs);
	}
}

$breadcrumbs = getBreadcrumbsArray($temp);
print_r($breadcrumbs);
?>
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы