Неустранимая ошибка: невозможно использовать смещение строки в качестве массива - PullRequest
3 голосов
/ 17 июня 2010
  Array
(
    [0] => Array
        (
            [auth_id] => 1
            [auth_section] => Client Data Base
            [auth_parent_id] => 0
            [auth_admin] => 1
            [sub] => Array
                (
                    [0] => Array
                        (
                            [auth_id] => 2
                            [auth_section] => Client Contact
                            [auth_parent_id] => 1
                            [auth_admin] => 1
                        )

                )

        )

    [1] => Array
        (
            [auth_id] => 6
            [auth_section] => All Back Grounds
            [auth_parent_id] => 0
            [auth_admin] => ,4
            [sub] => Array
                (
                    [0] => Array
                        (
                            [auth_id] => 7
                            [auth_section] => Edit Custom
                            [auth_parent_id] => 6
                            [auth_admin] => 1
                        )
                )

        )

    [2] => Array
        (
            [auth_id] => 20
            [auth_section] => Order Mail
            [auth_parent_id] => 0
            [auth_admin] => 1
            [sub] => 
        )

}

Когда я обрабатываю вложенный внутренний массив

for($in=0 ; $in < count($auth); $in++){

    $autsub     =   $auth[$in]["sub"];

    for($g=0 ; $g<count($autsub); $g++){

        echo $autsub[$g]["auth_id"];

    }
}

показывает эту ошибку

Неустранимая ошибка: невозможно использовать смещение строки в качестве массива .........

как мне этого избежать: (

Ответы [ 2 ]

9 голосов
/ 17 июня 2010

Проблема в том, что последняя запись в массиве (2) не имеет массива sub, но вы все равно пытаетесь получить к нему доступ. Вам нужно проверить, существует ли запись и является ли она массивом, прежде чем зацикливаться на ней. Вот пример использования foreach:

foreach ($array as $auth) {
    if (!empty($auth['sub']) && is_array($auth['sub'])) {
        foreach ($auth['sub'] as $sub) {
            if (!empty($sub['auth_id'])) {
                echo $sub['auth_id'];
            }
        }
    }
}
0 голосов
/ 17 июня 2010

Вы можете проверить тип смещения с помощью функции is_array ().Если вы хотите получить лучший ответ, опубликуйте код обработки.Проверьте, являются ли $ auth [$ in] и $ autsub [$ g] массивами.

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