Печать значения комбинации одного, двух и трехмерного массива - PullRequest
0 голосов
/ 28 февраля 2012

У меня есть эта комбинация многомерного массива, но я не могу вывести правильное значение на экране,

$parent = array(
    array(
        'function_name' => 'home',
        'screen_name' => 'Home'
        ),

    array(
        'function_name' => 'categories',
        'screen_name' => 'Categories',


        array(
            'function_name' => 'post',
            'screen_name' => 'Post',
            )
        ),

    array(
        'function_name' => 'pages',
        'screen_name' => 'Pages',


        array(
            'function_name' => 'add',
            'screen_name' => 'Add',

            array(
                'function_name' => 'manage',
                'screen_name' => 'Manage'
                )
            )
        )
);

некоторые массивы сами по себе, некоторые с sub массивами, а некоторые суб-массивы имеют subub массивов.

foreach($parent as $index => $item)
{   
    echo 'parent - '.$item['screen_name'].'<br/>';

    foreach($item as $child)
    {
        echo 'child - '.$child['screen_name'].'<br/>';

        foreach($child as $grandchild)
        {
            echo 'grandchild - '.$grandchild['screen_name'].'<br/>';
        }
    }
}

сообщение об ошибке,

Warning: Invalid argument supplied for foreach() in -> foreach($child as $grandchild)

результат, который я ищу, такой,

parent - Home
parent - Categories
  child - Post
parent - Pages
  child - Add
     grandchild - Manage

EDIT:

Я попробовал с этим тестом ниже,

foreach ($system as $inner_1) {

    if (is_array($inner_1)) 
    {

        foreach ($inner_1 as $inner_2) 
        {

             if (is_array($inner_2)) 
             {
                  foreach ($inner_2 as $inner_3) 
                  {
                     var_dump($inner_3['function_name']);
                  }
             }
        }
    }
}

но я получаю странный результат,

string 'p' (length=1) // don't know why I get this.
string 'P' (length=1) // don't know why I get this.

string 'a' (length=1) // don't know why I get this.
string 'A' (length=1) // don't know why I get this.

string 'manage' (length=6) // correct result.

1 Ответ

0 голосов
/ 28 февраля 2012

При запуске foreach($item as $child) на $parent[1], $child принимает следующие значения: 'home', 'Home' и массив.

Как насчет сохранения массивов чисто ассоциативными?

$parent = array(
    array(
        'function_name' => 'categories',
        'screen_name' => 'Categories',
        'children' => array(
            array(
                'function_name' => 'post',
                'screen_name' => 'Post'
            ),
            array(
                'function_name' => 'review',
                'screen_name' => 'Review',
                'children' => array(
                    ...
                )
            ),
        )
    )
);

Таким образом, вы можете запустить foreach ($item['children'] as $child), зная, что аргумент является массивом (вам нужно убедиться, что $item['children'] существует и является массивом).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...