PHP Diziler, ardışık bir dizi dizi öğeleri ekleyerek sayısı

2 Cevap php

Pointless Dribble


Bu benden başka garip biridir, tamam, benim son soru ... korkak dizi manipülasyon aynı bu tür fırsatlar bana yardım için OIS teşekkür etmek istiyorum ... i derinlemesine bu kodu okudu ve ben bana özyinelemeli dizi manipülatif fonksiyonları ile daha iyi hale yardımcı oldu hissediyorum. Ancak, yine ben başka bir zor bir noktada benim öz bulmak

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,
			                    'hasCh

2 Cevap

Ben bu çalışması gerekir ... Ben senin örnek dizi üzerinde test etmek mümkün değildi bence ama ben yapılan küçük bir dizi üzerinde çalışmak gibi görünüyor.

Edit: Şimdi size bir örnek dizisindeki 'derinlik' tuşlarını kaldırdık işlevini değiştirdi. Şimdi, kendi üzerindeki derinlik bulur. Ben de benim test kodu ve çıktısını ekledim:

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

?>

Çıktı:

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
        )

)

Ben gerçekten bu çalışacak söylemek istiyorum

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)