Реакция многомерного массива. Уменьшение (минимизация) вложенных циклов - PullRequest
0 голосов
/ 08 февраля 2019

Facebook Пакетный запрос API дает мне ответ. И, согласно моей логике, это лучший ответ, который я получаю, я хочу получить доступ к корневому элементу " source_id " и " copied_id "внутри [ТЕЛО].я просто хочу получить к ним доступ в минимальных циклах.

В настоящее время я использую вложенные циклы.

Array(
[0] => Array
    (
        [0] => stdClass Object
            (
                [code] => 200
                [body] => {"copied_adset_id":"15454","ad_object_ids":[{"ad_object_type":"ad_set","source_id":"545454","copied_id":"15454"}]}
            )
        [1] => stdClass Object
            (
                [code] => 200
                [body] => {"copied_adset_id":"1547754","ad_object_ids":[{"ad_object_type":"ad_set","source_id":"566454","copied_id":"1547754"}]}
            )
     )
 [1] => Array
    (
        [0] => stdClass Object
            (
                [code] => 200
                [body] => {"copied_adset_id":"1500454","ad_object_ids":[{"ad_object_type":"ad_set","source_id":"598754","copied_id":"1500454"}]}
            )
        [1] => stdClass Object
            (
                [code] => 200
                [body] => {"copied_adset_id":"78448","ad_object_ids":[{"ad_object_type":"ad_set","source_id":"541230","copied_id":"78448"}]}
            )
     ))

Тело, содержащее ответ JSON ниже, является декодированным ответом json.

stdClass Object(
[copied_adset_id] => 14848
[ad_object_ids] => Array
    (
        [0] => stdClass Object
            (
                [ad_object_type] => ad_set
                [source_id] => 14848
                [copied_id] => 448486
            )

    ))

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Используйте следующий код, надеюсь, это поможет вам

foreach($arraya as $arrayaresponse) {    
    foreach($arrayaresponse as $copiedarray) {    
        $adsetdata = array();    
        $copiedBody = json_decode($copiedarray - > body);    
        $adata['source_id'] = $copiedBody - > ad_object_ids[0] - > source_id;   
        $adata['copied_id'] = $copiedBody - > ad_object_ids[0] - > copied_id;   
    }  
 }
0 голосов
/ 08 февраля 2019

Вы можете изменить его, чтобы использовать Коллекции, так как вы используете Laravel.

Например:

$response = [
    [
        (object) [
            'code' => 200, 
            'body' => '{"copied_adset_id":15454,"ad_object_ids": [{"ad_object_type":"ad_set","source_id": 545454,"copied_id": 545}]}'
        ],
        (object) [
            'code' => 200, 
            'body' => '{"copied_adset_id":15454,"ad_object_ids": [{"ad_object_type":"ad_set","source_id": 545454,"copied_id": 545}]}'
        ]  
    ],
    [
        (object) [
            'code' => 200, 
            'body' => '{"copied_adset_id":15454,"ad_object_ids": [{"ad_object_type":"ad_set","source_id": 545454,"copied_id": 545}]}'
        ],
        (object) [
            'code' => 200, 
            'body' => '{"copied_adset_id":15454,"ad_object_ids": [{"ad_object_type":"ad_set","source_id": 545454,"copied_id": 545}]}'
        ]  
    ]  
];

return collect($response)
    ->flatten()
    ->flatMap(function($item) {
        return json_decode($item->body, true)['ad_object_ids'];
    })
    ->map(function($item) {
        return array_only($item, ['source_id', 'copied_id']);
    })
    ->toArray();

Вывод вышеупомянутого будет:

array:4 [▼
  0 => array:2 [▼
    "source_id" => 545454
    "copied_id" => 545
  ]
  1 => array:2 [▼
    "source_id" => 545454
    "copied_id" => 545
  ]
  2 => array:2 [▼
    "source_id" => 545454
    "copied_id" => 545
  ]
  3 => array:2 [▼
    "source_id" => 545454
    "copied_id" => 545
  ]
]

Вот пример , с которым вы можете поиграть.

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