Не могу правильно обработать foreach

199
11 января 2018, 23:27

Есть вот такой массив:

Array
(
    [data] => Array
        (
            [0] => Array
                (
                    [category] => Website
                    [name] => Brains
                    [id] => 2791308653434598
                    [perms] => Array
                        (
                            [0] => ADMINISTER
                            [1] => EDIT_PROFILE
                            [2] => CREATE_CONTENT
                            [3] => MODERATE_CONTENT
                            [4] => CREATE_ADS
                            [5] => BASIC_ADMIN
                        )
                )
            [1] => Array
                (
                    [category] => App Page
                    [name] => StarPeak - Money Through Glory
                    [id] => 33953467150574
                    [perms] => Array
                        (
                            [0] => ADMINISTER
                            [1] => EDIT_PROFILE
                            [2] => CREATE_CONTENT
                            [3] => MODERATE_CONTENT
                            [4] => CREATE_ADS
                            [5] => BASIC_ADMIN
                        )
                )
            [2] => Array
                (
                    [category] => Real Estate
                    [category_list] => Array
                        (
                            [0] => Array
                                (
                                    [id] => 198327773511962
                                    [name] => Real Estate
                                )
                        )
                    [name] => TezTap.az - Axtardığını tez tap
                    [id] => 14443736253434587
                    [perms] => Array
                        (
                            [0] => ADMINISTER
                            [1] => EDIT_PROFILE
                            [2] => CREATE_CONTENT
                            [3] => MODERATE_CONTENT
                            [4] => CREATE_ADS
                            [5] => BASIC_ADMIN
                        )
                )
    [paging] => Array
        (
            [cursors] => Array
                (
                    [before] => Mjc5MTMwODY1OTКХNTk4
                    [after] => MTUyODUКХzg4MDcwMzE0MQZDZD
                )
        )
)

как вывести только [name] из этого массива?

Сделал так не помогло

foreach( $data2 as $value ) {
        echo $value->name;
}
Answer 1
  1. У вас вложенный массив. Вам надо перебирать не $data2, а $data2['data']

  2. У вас массив, а не объект. Доступ к элементу name должен быть такой $value['name']

Т.е.:

foreach( $data2['data'] as $value ){ 
    echo $value['name'];
}
Answer 2

Из-за того, что массив многомерный, а искомые элементы 'name' находятся на разных уровнях, нужно пользоваться рекурсивной функцией. Можно встроенной array_walk_recursive():

Массив

$data2 = Array(
    'data' => Array(
        Array(
            'category'=> 'Website',
            'name'    => 'Brains',
            'id'      => 2791308653434598,
            'perms'    => Array(
                ADMINISTER,
                EDIT_PROFILE,
                CREATE_CONTENT,
                MODERATE_CONTENT,
                CREATE_ADS,
                BASIC_ADMIN
            )
        ),
        Array(
            'category'=> 'App Page',
            'name'    => 'StarPeak - Money Through Glory',
            'id'      => 33953467150574,
            'perms'   => Array(
                ADMINISTER,
                EDIT_PROFILE,
                CREATE_CONTENT,
                MODERATE_CONTENT,
                CREATE_ADS,
                BASIC_ADMIN
            )
        ),
        Array(
            'category'     => 'Real Estate',
            'category_list' => Array(
                Array(
                    'id'  => 198327773511962,
                    'name'=> 'Real Estate'
                )
            ),
            'name' => 'TezTap.az - Axtardığını tez tap',
            'id' => 14443736253434587,
            'perms' => Array(
                ADMINISTER,
                EDIT_PROFILE,
                CREATE_CONTENT,
                MODERATE_CONTENT,
                CREATE_ADS,
                BASIC_ADMIN
            )
        ),
        'paging' => Array(
            'cursors' => Array(
                'before'=> 'Mjc5MTMwODY1OTКХNTk4',
                'after' => 'MTUyODUКХzg4MDcwMzE0MQZDZD'
            )
        )
    )
);

Код

array_walk_recursive($data2, function($v, $k) {
    echo (!empty($k) && $k == 'name') ? "$v<br>" : '';
});

Результат

Brains
StarPeak - Money Through Glory
Real Estate
TezTap.az - Axtardığını tez tap
READ ALSO
Не могу перезаписать в файле значение внутри многомерного массива

Не могу перезаписать в файле значение внутри многомерного массива

Есть файл configsphp в котором хранится многомерный массив с данными, например:

189
Баг в обрисовке букв - ограничение на количество точек кривой?

Баг в обрисовке букв - ограничение на количество точек кривой?

Есть некоторый текст, который выводится на пустую картинку с помощью annotateImageЗадается толщина обводки таким образом:

210
Запись переменной в mysql из текстового поля через php

Запись переменной в mysql из текстового поля через php

ЗдравствуйтеПодскажите как правильно передать переменную

237
Получить токен страницы на facebook

Получить токен страницы на facebook

Мне нужно получить json фаил со отзывами, о странице, сейчас моя ссылка выглядит так:

234