문제

무의미한 드리블


알았어 이건 내게 또 다른 이상한 사람이야, 고마워하고 싶어 OIS 마지막 질문을 도와 주면서 ...이 같은 종류의 펑키 어레이 조작을 다루는 것 ... 나는 그 코드를 깊이 연구했고, 그것이 재귀 배열 조작 함수로 더 나아질 수있게되었다고 생각합니다. 그러나 다시 한 번 나는 또 다른 힘든 곳에서 내 자신을 찾습니다.

실제 문제


나는 다시 재귀적인 조작 기능을 작성하려고합니다. 이것. 각 배열 요소의 깊이를 얻는 것을 제외하고. 특정 깊이로 각 배열 요소에 증분 계산이 추가됩니다. 내가하려고하는 것을 보는 가장 쉬운 방법은 "샘플 어레이"및 "원하는 결과 배열"을 보는 것입니다. 이런 종류의 재귀 기능을 이해하는 것이 더 좋아지고 있다고 생각합니다. 그러나 이것은 나에게 지옥을주고 있습니다. 당신이 나에게 이것을 줄 수있는 어떤 종류의 도움에 대해 미리 감사드립니다. 샘플 배열의 [깊이] 결과를 무시하십시오. 이미 이것을 추가하는 함수가 있습니다. 다시 한 번 감사드립니다

샘플 배열


            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,
                      ),
                    ),
                  ),
                ),
              ),
            )

원하는 결과 배열
count] 색인을 주목하십시오


            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
                                                    )
도움이 되었습니까?

해결책

나는 이것이 작동해야한다고 생각한다 ... 나는 당신의 예제 배열에서 테스트 할 수 없었지만 내가 만든 더 작은 배열에서 작동하는 것 같습니다.

편집하다: 예제 배열에서 '깊이'키를 제거 했으므로 이제 기능을 변경했습니다. 이제 그것은 그 자체로 깊이를 찾습니다. 또한 테스트 코드와 출력을 추가했습니다.

<?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);

?>

산출:

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
        )

)

다른 팁

나는 이것이 효과가 있다고 말하고 싶다

function deep(&$layer)
{
    $count = 1;
    $keys = array_keys($layer);
    foreach($keys as $key)
        if(is_array($layer[$key]))
            deep($layer[$key]);
    $layer['depth'] = $count++;
}

(테스트하고 나를 위해 잘 작동합니다) (질문을 오해하는 또 다른 사례. 이것이 당신이 원하는 것이되어야합니다)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top