PHP Arrays, acrescentando contagem de itens de matriz de forma recursiva para uma matriz
-
22-08-2019 - |
Pergunta
Pointless Drible
Ok Este é mais um estranho de mim, quero agradecer OIS por me ajudar na minha última pergunta. .. que lida com esse mesmo tipo de manipulação de matriz funk ... eu estudei esse código em profundidade e eu sinto que me ajudou a tornar-se melhor com as funções de manipulação de matriz recursiva. No entanto, mais uma vez eu encontrar o meu eu em outra situação difícil
Actual Problema
Eu estou tentando escrever uma função manipuladora recursiva como este . Excepto para obter a profundidade de cada elemento de matriz. Ele irá adicionar incremento contagem para cada elemento da matriz com uma certa profundidade. A maneira mais fácil de ver o que estou tentando fazer é para ver o "sample variedade" e 'matriz resultado desejado' ... Eu sinto que estou ficando melhor compreender este tipo de funções recursivas. mas este está me dando o inferno, obrigado antecipadamente para qualquer tipo de ajuda que você pode me dar com isso.
Por favor desconsidere o [profundidade] resultado da matriz da amostra já tenho uma função que adiciona este.
Obrigado novamente,
- YouDontMeanMuch
array (
52 =>
array (
'title' => 'Website Navigation',
'path' => '',
'type' => '115',
'pid' => 0,
'hasChildren' => 1,
'children' =>
array (
53 =>
array (
'title' => 'Home',
'path' => '',
'type' => '118',
'pid' => 52,
'hasChildren' => 0,
),
54 =>
array (
'title' => 'Features',
'path' => 'features',
'type' => '374',
'pid' => 52,
'hasChildren' => 1,
'children' =>
array (
59 =>
array (
'title' => 'artistic',
'path' => 'features/artistic',
'type' => '374',
'pid' => 54,
'hasChildren' => 1,
'children' =>
array (
63 =>
array (
'title' => 'galleries',
'path' => 'features/artistic/galleries',
'type' => '374',
'pid' => 59,
'hasChildren' => 1,
'children' =>
array (
65 =>
array (
'title' => 'graphics',
'path' => 'features/artistic/galleries/graphics',
'type' => '118',
'pid' => 63,
'hasChildren' => 0,
),
67 =>
array (
'title' => 'mixed medium',
'path' => 'features/artistic/galleries/mixed-medium',
'type' => '118',
'pid' => 63,
'hasChildren' => 0,
),
64 =>
array (
'title' => 'overview',
'path' => 'features/artistic/galleries',
'type' => '118',
'pid' => 63,
'hasChildren' => 0,
),
68 =>
array (
'title' => 'photography',
'path' => 'features/artistic/galleries/photography',
'type' => '118',
'pid' => 63,
'hasChildren' => 0,
),
66 =>
array (
'title' => 'traditional',
'path' => 'features/artistic/galleries/traditional',
'type' => '118',
'pid' => 63,
'hasChildren' => 0,
),
),
),
62 =>
array (
'title' => 'overview',
'path' => 'features/artistic',
'type' => '118',
'pid' => 59,
'hasChildren' => 0,
),
69 =>
array (
'title' => 'tutorials',
'path' => 'features/artistic/tutorials',
'type' => '374',
'pid' => 59,
'hasChildren' => 1,
'children' =>
array (
71 =>
array (
'title' => 'by category',
'path' => 'features/artistic/tutorials/by-category/',
'type' => '118',
'pid' => 69,
'hasChildren' => 0,
),
72 =>
array (
'title' => 'by date',
'path' => 'features/artistic/tutorials/by-date/',
'type' => '118',
'pid' => 69,
'hasChildren' => 0,
),
70 =>
array (
'title' => 'overview',
'path' => 'features/artistic/tutorials',
'type' => '118',
'pid' => 69,
'hasChildren' => 0,
),
),
),
),
),
58 =>
array (
'title' => 'overview',
'path' => 'features',
'type' => '118',
'pid' => 54,
'hasChildren' => 0,
),
61 =>
array (
'title' => 'projects / labs',
'path' => 'features/projects-labs/',
'type' => '374',
'pid' => 54,
'hasChildren' => 0,
),
60 =>
array (
'title' => 'web development',
'path' => 'features/web-development',
'type' => '374',
'pid' => 54,
'hasChildren' => 1,
'children' =>
array (
74 =>
array (
'title' => 'articles',
'path' => 'features/web-development/articles/',
'type' => '374',
'pid' => 60,
'hasChildren' => 0,
),
73 =>
array (
'title' => 'overview',
'path' => 'features/web-development',
'type' => '118',
'pid' => 60,
'hasChildren' => 0,
),
75 =>
array (
'title' => 'tutorials',
'path' => 'features/web-development/tutorials',
'type' => '374',
'pid' => 60,
'hasChildren' => 0,
),
),
),
),
),
55 =>
array (
'title' => 'Activity',
'path' => 'activity',
'type' => '374',
'pid' => 52,
'hasChildren' => 0,
),
56 =>
array (
'title' => 'Blog',
'path' => 'blog',
'type' => '374',
'pid' => 52,
'hasChildren' => 0,
),
57 =>
array (
'title' => 'About',
'path' => 'about',
'type' => '374',
'pid' => 52,
'hasChildren' => 1,
'children' =>
array (
76 =>
array (
'title' => 'the author',
'path' => 'about/the-author',
'type' => '118',
'pid' => 57,
'hasChildren' => 0,
),
77 =>
array (
'title' => 'the website',
'path' => 'about/the-website',
'type' => '118',
'pid' => 57,
'hasChildren' => 0,
),
),
),
),
),
)
desejado resultado da matriz
Observe o [contador] índice
Array
(
[53] => Array
(
[title] => Home
[path] =>
[type] => 118
[pid] => 52
[mid] => 53
[hasChildren] => 0
[depth] => 1
[count] => 1
)
[54] => Array
(
[title] => Features
[path] => features
[type] => 374
[pid] => 52
[mid] => 54
[hasChildren] => 1
[depth] => 1
[count] => 2
[children] => Array
(
[59] => Array
(
[title] => artistic
[path] => features/artistic
[type] => 374
[pid] => 54
[mid] => 59
[hasChildren] => 1
[depth] => 2
[count] => 1
[children] => Array
(
[63] => Array
(
[title] => galleries
[path] => features/artistic/galleries
[type] => 374
[pid] => 59
[mid] => 63
[hasChildren] => 1
[depth] => 3
[count] => 1
[children] => Array
(
[65] => Array
(
[title] => graphics
[path] => features/artistic/galleries/graphics
[type] => 118
[pid] => 63
[mid] => 65
[hasChildren] => 0
[depth] => 4
[count] => 1
)
[67] => Array
(
[title] => mixed medium
[path] => features/artistic/galleries/mixed-medium
[type] => 118
[pid] => 63
[mid] => 67
[hasChildren] => 0
[depth] => 4
[count] => 2
)
[64] => Array
(
[title] => overview
[path] => features/artistic/galleries
[type] => 118
[pid] => 63
[mid] => 64
[hasChildren] => 0
[depth] => 4
[count] => 3
)
[68] => Array
(
[title] => photography
[path] => features/artistic/galleries/photography
[type] => 118
[pid] => 63
[mid] => 68
[hasChildren] => 0
[depth] => 4
[count] => 4
)
[66] => Array
(
[title] => traditional
[path] => features/artistic/galleries/traditional
[type] => 118
[pid] => 63
[mid] => 66
[hasChildren] => 0
[depth] => 4
[count] => 5
)
)
)
[62] => Array
(
[title] => overview
[path] => features/artistic
[type] => 118
[pid] => 59
[mid] => 62
[hasChildren] => 0
[depth] => 3
[count] => 2
)
[69] => Array
(
[title] => tutorials
[path] => features/artistic/tutorials
[type] => 374
[pid] => 59
[mid] => 69
[hasChildren] => 1
[depth] => 3
[count] => 3
[children] => Array
(
[71] => Array
(
[title] => by category
[path] => features/artistic/tutorials/by-category/
[type] => 118
[pid] => 69
[mid] => 71
[hasChildren] => 0
[depth] => 4
[count] => 1
)
[72] => Array
(
[title] => by date
[path] => features/artistic/tutorials/by-date/
[type] => 118
[pid] => 69
[mid] => 72
[hasChildren] => 0
[depth] => 4
[count] => 2
)
[70] => Array
(
[title] => overview
[path] => features/artistic/tutorials
[type] => 118
[pid] => 69
[mid] => 70
[hasChildren] => 0
[depth] => 4
[count] => 3
)
)
)
)
)
[58] => Array
(
[title] => overview
[path] => features
[type] => 118
[pid] => 54
[mid] => 58
[hasChildren] => 0
[depth] => 2
[count] => 2
)
[61] => Array
(
[title] => projects / labs
[path] => features/projects-labs/
[type] => 374
[pid] => 54
[mid] => 61
[hasChildren] => 0
[depth] => 2
[count] => 3
)
[60] => Array
(
[title] => web development
[path] => features/web-development
[type] => 374
[pid] => 54
[mid] => 60
[hasChildren] => 1
[depth] => 2
[count] => 4
[children] => Array
(
[74] => Array
(
[title] => articles
[path] => features/web-development/articles/
[type] => 374
[pid] => 60
[mid] => 74
[hasChildren] => 0
[depth] => 3
[count] => 1
)
[73] => Array
(
[title] => overview
[path] => features/web-development
[type] => 118
[pid] => 60
[mid] => 73
[hasChildren] => 0
[depth] => 3
[count] => 2
)
[75] => Array
(
[title] => tutorials
[path] => features/web-development/tutorials
[type] => 374
[pid] => 60
[mid] => 75
[hasChildren] => 0
[depth] => 3
[count] => 3
)
Solução
Eu acho que isso deve funcionar ... Eu não era capaz de teste em sua matriz de exemplo, mas parece trabalhar em uma matriz menor que eu fiz.
Editar: Mudou a função agora que você tenha removido as chaves 'profundidade' do seu exemplo de matriz. Agora ele encontra a profundidade por conta própria. Eu também acrescentou meu código de teste e de saída:
<?php
function array_depth_count(&$array, $count=array(), $depth=1) {
foreach ($array as &$value) {
if (is_array($value)) {
$value['count'] = ++$count[$depth];
array_depth_count($value, $count, $depth + 1);
}
}
}
$a = array(array(array(array(0),array(0),array(),array()),0,array()));
echo "Before\n";
print_r($a);
array_depth_count($a);
echo "\n\nAfter\n";
print_r($a);
?>
Output:
Before
Array
(
[0] => Array
(
[0] => Array
(
[0] => Array
(
[0] => 0
)
[1] => Array
(
[0] => 0
)
[2] => Array
(
)
[3] => Array
(
)
)
[1] => 0
[2] => Array
(
)
)
)
After
Array
(
[0] => Array
(
[0] => Array
(
[0] => Array
(
[0] => 0
[count] => 1
)
[1] => Array
(
[0] => 0
[count] => 2
)
[2] => Array
(
[count] => 3
)
[3] => Array
(
[count] => 4
)
[count] => 1
)
[1] => 0
[2] => Array
(
[count] => 2
)
[count] => 1
)
)
Outras dicas
Eu realmente quero dizer isso vai funcionar
function deep(&$layer)
{
$count = 1;
$keys = array_keys($layer);
foreach($keys as $key)
if(is_array($layer[$key]))
deep($layer[$key]);
$layer['depth'] = $count++;
}
(Testado e multa funciona para mim) (Outro caso de me mal-entendido a pergunta. Isso deve ser o que você quiser)