только один массив показывает использование foreach l oop in laravel - PullRequest
0 голосов
/ 14 июля 2020

Когда я использую для объединения двух массивов в foreach l oop, первый массив работает нормально, но второй массив показывает один результат и d ie. Надеюсь, вы понимаете мой вопрос.

$output = [];
foreach ($vehicles as $key => $vehicle) {
    $center_lat = $lat;
    $center_lng = $lon;
    $lat=$vehicle->lat;
    $lng=$vehicle->lon;

    $vehicle->distance = haversineGreatCircleDistance($center_lat, $center_lng, $lat, $lng, 6371);
    $id= $vehicle->abc_id;
    $abc=DB::table('tbl')->where('id',$id)->get();

    $output [$key] = $vehicle;
    $result = array_merge($output,(array)$abc);
}

return response()->json($result);

почему $ ab c возвращает только один массив

dd ($ output, $ ab c) показывает

array:2 [
  0 => {#346
    +"id": 1
    +"vehicle_type": "bus"
   ...........
  }
  1 => {#100
    +"id": 3
    +"vehicle_type": "car"
    .....
  }
]
Collection {#356
  #items: array:1 [
    0 => {#352
      +"id": 3
    ........
    
    }
  ]
}

Ответы [ 2 ]

0 голосов
/ 14 июля 2020

Проблема в том, что вы пытаетесь объединить коллекцию array_merge.

array_merge примет:

array_merge([1, 2, 3], ['a', 'b', 'c'])
// result -> [1,2,3,"a","b","c"]

Однако он не понимает, как объединять объекты, и коллекция ЯВЛЯЕТСЯ объектом . например)

array_merge([1,2,3], collect(['a', 'b', 'c']))
// Result: 'array_merge(): Expected parameter 2 to be an array, object given...'

Кроме того, просто введите приведение коллекции к массиву, это не даст результатов, которые вы хотите:

array_merge([4,5,6],(array) collect([1,2,3]))
// Result: [0 => 4, 1 => 5, 2 => 6, "\0*\0items" => [1,2,3]]

Если вы хотите сохранить свой код, вы можете использовать :

    $result = array_merge($output,$abc->toArray());
0 голосов
/ 14 июля 2020

попробуйте этот код

$result[] = array_merge((array)$vehicle,(array)$abc);

это добавит $output[$key] и (array)$abc вместе в одном и том же ключе в $result массиве

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