Цикл многомерного массива в контроллере - PullRequest
0 голосов
/ 07 марта 2019

Мне нужно зацикливаться на многопоточном массиве, используемом в исходящем API. После использования API в контроллере мне нужно вставить зацикленные записи в модель.

Итак, ответ, полученный от внешнего API, следующий:

enter image description here

Итак, что я делаю в своей функции контроллера, так это:

public function index()
{

    $client = new \GuzzleHttp\Client();
    $response = $client->request('GET', 'http://api', [
        'headers' => [
             'x-authtoken' => '0275d',
             'cache-control' => 'no-cache'],
             'decode_content' => false
    ]);

     //get body content
    $body = $response->getBody()->getContents();
    $data = json_decode($body, true);

    foreach ( $data['content']['Propiedades'] as $propiedades )
        {
            $id = Arr::get($propiedades, 'Id');
            $Moneda = Arr::get($propiedades, 'Precio.Moneda');
            $Precio = Arr::get($propiedades, 'Precio.Valor')
        }

}

Проблема в том, что я зацикливаю только один экземпляр массива "propiedades".

enter image description here

1. Как я могу зациклить весь массив "propiedades" и извлечь из него значения ключа?

2. Как получить доступ к каждому массиву "propiedades" к следующему вложенному массиву и вернуть эти вложенные значения, полученные на первый уровень массива? Например, мой результат должен быть для каждой записи свойства:

Propiedades.Id

Propiedades.Precio.Moneda

Propiedades.Precio.Valor

3. Я получаю все «пропиады» с их значениями. Нужно ли создавать массив для вставки этих записей в модель? Как передать данные в модель? Мои модели будут иметь структуру в виде массива, полученного из API с соответствующими дочерними объектами для «propiedades»


Заранее спасибо! Привет

1 Ответ

0 голосов
/ 07 марта 2019

Хорошо, я сохранил весь файл json в файл, а затем расшифровал и распечатал все это, я не вижу в этом никакой сложности, все получается так, как вы хотели, я зарегистрировался на локальном и на моем личном рабочем сервере, данные зацикливалисьКак вы и хотели,

Теперь, если у вас все еще есть проблемы именно с циклом, вам нужно больше отлаживать, как Правильно ли декодируется json?что-то вроде того.Это моя последняя попытка для этого вопроса, в частности, циклическая часть, если есть какая-либо другая проблема, кроме циклической, то, пожалуйста, дайте мне знать.:)

    Route::get('/test',function(){
    $content = json_decode(\File::get(public_path().'/custom.txt'),true);
    // Actual Content
    //dump($content);

    // First and Best Approach
    foreach ($content['content']['Propiedades'] as $key){
        dump($key['Id']);
        dump($key['Titulo']);
        dump($key['Descripcion']);
        dump($key['Precio']);
        dump($key['Operacion']);
        dump($key['EstadoPublicacion']);
        dump($key['Ubicacion']);
        dump($key['UbicacionCadena']);
        dump($key['TipoPropiedad']);
        dump($key['Direccion']);
        dump($key['RoundDireccion']);
        dump($key['Calle']);
        dump($key['Numero']);
        dump($key['Latitud']);
        dump($key['Longitud']);
        dump($key['ImagenPrincipal']);
        dump($key['SuperficieTotal']);
        dump($key['Dormitorios']);
        dump($key['Banios']);
        dump($key['CantidadAmbientes']);
        dump($key['AtributosDestacadosListado']);
        dump($key['Usuario']);
        dump($key['IdUbicacion']);
        dump($key['Imagenes']);
        dump($key['Sucursal']);
        dump($key['FechaCreacion']);
        dump($key['FechaModificacion']);
        dump($key['PublicaPrecio']);
        dump($key['PathFicha']);
    }

    // Second and Long Approach

//    foreach ($content as $key => $value){
//        if($key === 'status'){
//            //dump($value);
//        }elseif($key === 'content'){
//            //dump($value);
//            foreach ($value as $key1 => $value1){
//                if($key1 === 'cantidadPropiedades'){
//                    //dump($value1);
//                }elseif($key1 === 'cantidadPropiedades'){
//                    //dump($value1);
//                }elseif($key1 === 'Propiedades'){
//                    //dump($value1);
//                    foreach ($value1 as $key2 => $value2){
//                        //dump($value2);
//                        dump($value2['Id']);
//                        dump($value2['Titulo']);
//                        dump($value2['Descripcion']);
//                        dump($value2['Precio']);
//                        dump($value2['Operacion']);
//                        dump($value2['EstadoPublicacion']);
//                        dump($value2['Ubicacion']);
//                        dump($value2['UbicacionCadena']);
//                        dump($value2['TipoPropiedad']);
//                        dump($value2['Direccion']);
//                        dump($value2['RoundDireccion']);
//                        dump($value2['Calle']);
//                        dump($value2['Numero']);
//                        dump($value2['Latitud']);
//                        dump($value2['Longitud']);
//                        dump($value2['ImagenPrincipal']);
//                        dump($value2['SuperficieTotal']);
//                        dump($value2['Dormitorios']);
//                        dump($value2['Banios']);
//                        dump($value2['CantidadAmbientes']);
//                        dump($value2['AtributosDestacadosListado']);
//                        dump($value2['Usuario']);
//                        dump($value2['IdUbicacion']);
//                        dump($value2['Imagenes']);
//                        dump($value2['Sucursal']);
//                        dump($value2['FechaCreacion']);
//                        dump($value2['FechaModificacion']);
//                        dump($value2['PublicaPrecio']);
//                        dump($value2['PathFicha']);
//                    }
//                }elseif($key1 === 'FiltrosAplicados'){
//                    //dump($value1);
//                }elseif($key1 === 'FiltrosDisponibles'){
//                    //dump($value1);
//                }elseif($key1 === 'OrdenamientosAplicados'){
//                    //dump($value1);
//                }elseif($key1 === 'OrdenamientosDisponibles'){
//                    //dump($value1);
//                }elseif($key1 === 'Paginado'){
//                    //dump($value1);
//                }
//            }
//        }elseif($key === 'errors'){
//            //dump($value);
//        }
//    }
    dd("STOP");
})->name('test');

Надеюсь, это поможет.

...