vote up 0 vote down
star

Pointless Dribble


Okay This is another weird one from me, i want to thank OIS for helping me out on my last question... which deals with this same kind of funky array manipulation... i studied that code in depth and i feel it has helped me become better with recursive array manipulative functions. However, once again i find my self in another tough spot

Actual Problem

I am trying to write a recursive manipulative function such as this. Except for getting the depth of each array element. It will add incremental count to each array element with a certain depth. The easiest way to see what I'm trying to do is to view the "sample array" and "Desired result Array"... i feel like I'm getting better at understanding these kind of recursive functions. but this one is giving me hell, thanks in advance for any kind of help you can give me with this. Please disregard the [depth] result of the sample array i already have a function that adds this. Thanks again, -- YouDontMeanMuch

Sample Array


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

Desired result Array
Notice the [count] index


			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
			                                        )
offensive?
add comment

2 Answers:

vote up 2 vote down
check

I think this should work... I wasn't able to test on your example array but it seems to work on a smaller array I made.

Edit: Changed the function now that you've removed the 'depth' keys from your example array. Now it finds the depth on its own. I've also added my test code and output:

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

)
link|offensive?
comments (3)
vote up 0 vote down

I really want to say this will work

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

(Tested and works fine for me) (Another case of me misunderstanding the question. This should be what you want)

link|offensive?
comments (1)

Your Answer:

Get an OpenID
or

Not the answer you're looking for? Browse other questions tagged or ask your own question.