@sportik174

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

Есть массив:
parent_id = ID родительской категории

$categories = array(
array(
name => 'Категория 1'
id => 1
)
array(
name => 'Категория 2'
id => 2
)
array(
name => 'Категория 3'
id => 3
parent_id => 1
)
array(
name => 'Категория 4'
id => 4
parent_id => 2
)
array(
name => 'Категория 5'
id => 5
parent_id => 3
)
)
5d6e64e6cec32413181344.png

Нужно разбить все элементы массива по принадлежности друг к другу. В конечно итоге должно получиться как-то так:
$category1 = array(
array(
name => 'Категория 1'
id => 1
)
array(
name => 'Категория 3'
id => 3
parent_id => 1
)
array(
name => 'Категория 5'
id => 5
parent_id => 3
)
)

$category2 = array(
array(
name => 'Категория 2'
id => 2
)
array(
name => 'Категория 4'
id => 4
parent_id => 2
)
)
  • Вопрос задан
  • 163 просмотра
Решения вопроса 1
DevMan
@DevMan
пример на коленке:
$categories = [
	[
		'name' => 'Категория 1',
		'id'   => 1,
	],
	[
		'name' => 'Категория 2',
		'id'   => 2,
	],
	[
		'name'      => 'Категория 3',
		'id'        => 3,
		'parent_id' => 1,
	],
	[
		'name'      => 'Категория 4',
		'id'        => 4,
		'parent_id' => 2,
	],
	[
		'name'      => 'Категория 5',
		'id'        => 5,
		'parent_id' => 3,
	]
];

$tmp = [];
foreach( $categories as $value ) {
	if( ! isset( $value[ 'parent_id' ] ) ) {
		$tmp[ $value[ 'id' ] ]           = $value[ 'id' ];
		${'category' . $value[ 'id' ]}[] = $value;
	}
	else {
		$tmp[ $value[ 'id' ] ] = $value[ 'parent_id' ];
		$key                   = $value[ 'id' ];
		while( $key = array_search( $key, array_flip( $tmp ) ) ) {
			$index = $tmp[ $key ];
		}
		${'category' . $index}[] = $value;
	}
}
print_r( $category1 );
print_r( $category2 );
https://ideone.com/Acy0kY
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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