PHP-разбор многомерного массива из Elastic Search - PullRequest
0 голосов
/ 22 января 2019

У меня есть этот многомерный массив с именем $response ( Я получаю только один результат, но в действительности их много ..)

Array
(
    [took] => 17
    [timed_out] => 
    [_shards] => Array
        (
            [total] => 5
            [successful] => 5
            [skipped] => 0
            [failed] => 0
        )

    [hits] => Array
        (
            [total] => 16
            [max_score] => 13.034995
            [hits] => Array
                (
                    [0] => Array
                        (
                            [_index] => zh3
                            [_type] => zone_humide
                            [_id] => 4950467
                            [_score] => 13.034995
                            [_source] => Array
                                (
                                    [surfcal_ha] => 2.26
                                    [@timestamp] => 2019-01-21T19:25:48.826Z
                                    [@version] => 1
                                    [donnee_id] => 3355
                                    [zhu_cbi] => 82
                                    [zh_nom] => Coupigny
                                    [gid] => 4950467
                                    [zh_part_id] => 079FONTEN0011
                                    [is_pe] => 
                                )

                        )
                )

        )

)       

Я хочу получить gid атрибут.Для этого я попытался:

foreach ($response['hits']['hits'][0]['_source'] as $result) {
echo $result['gid'];
}

Но я получаю это предупреждение PHP:

Предупреждение PHP: недопустимое смещение строки 'gid'

Я пробовал разные вещи .. добавить еще один цикл foreach, изменить эхо, но ничего не работает.Я пытался , что поступает из StackOverflow, но тоже безрезультатно.Ну, я думаю, что я действительно застрял.

Есть идеи по этой проблеме?
Любая помощь будет принята с благодарностью!Спасибо

Ответы [ 2 ]

0 голосов
/ 22 января 2019

это потому что вы используете foreach на $response['hits']['hits'][0]['_source']
например.1. в первом цикле foreach он получает $result['surfcal_ha']
2. во втором цикле он получает $result[@timestamp]
, поэтому до тех пор, пока он не получит $result['gid'], он выдаст предупреждение. Попробуйте использовать ниже без foreach

echo $response['hits']['hits'][0]['_source']['gid'];
0 голосов
/ 22 января 2019

$response массив имеет только один родительский элемент.Почему вы используете foreach?

Просто попробуйте

echo $response['hits']['hits'][0]['_source']['gid'];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...