Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Estou fazendo um select no meu banco de dados jutando várias informações, e estou salvando os resultados num array, que está organizado desta forma: [https://imgur.com/ViUNR3i](https://imgur.com/ViUNR3i)
O que eu estou tentando fazer é ordenar os pais e os filhos de acordo com o `level` mostrado na imagem, colocando os filhos dentro de um novo array do seu respectivo pai.
Por exemplo:
0 => {
"ordination": "10501"
"level": 3
"children":
0 => {
"ordination": "1050101"
"level": 4
"children":
0 => {
"ordination": "1050101001"
"level": 5
}
1 => {
"ordination": "1050101002"
"level": 5
}
1 => {
"ordination": "1050102"
"level": 4
"children":
0 => {
"ordination": "1050101001"
"level": 5
}
}
}
Tentei pensar em uma lógica correndo pelo array de trás para frente, mas mesmo assim não consegui finalizar.
Alguma ideia de como eu possa reorganizar o array do jeito mostrado a cima?Obrigado pela resposta!
Para saber quem é filho de quem, utilizo o ordination, ou seja, caso o pai seja "10501", seus filhos serão: "1050101", "1050102", etc. Se o pai for o "1050101", seus filhos serão "1050101001", "1050101002", etc.
Entendi a parte para fazer a extração e criar um array novo para cada nível. Eu teria que comparar os prefixos do ordination (10501 ou 1050101) para saber onde colocar os filhos.
Olá!
Não entendi uma coisa... na sua foto você tem um item nível 5 e dois níveis 4, daí você fez a flechinha apontando o 5 para um dos 4 (um nó-filho, no caso). Como você sabe qual dos dois 4 é o pai do 5? É só seguir a ordem mesmo?
Tirando esse conflito, o resto é relativamente fácil: você faz um loop ao redor desses itens, extraindo todos do níveis da vez e injetando em um novo array. Assim:
1 - Volta nos níveis 1: pega todos os níveis 1, remove do array (para acelerar as próximas buscas) e insere na raíz.
2 - Volta nos níveis 2: pega todos os níveis 2, remove do array (para acelerar as próximas buscas) e insere em seu respectivo pai (só precisa determinar qual é o pai, se tiver mais de um nesse nível).
Exemplo:
<?php
$array = [
Array inicial:
Array
(
Extraídos level 3 (coloca na posição correta do array):
Array
(
Extraídos level 9 (coloca na posição correta do array):
Array
(
Array final (falta extrair e processar os demais...):
Array
(