Gutek
Gutek

Reputation: 107

How to make multiple records in array php

From my database i am receaving array, that i`m later sending using Fetch Api to my frontend and display data that was send. It looks like this:

return $stmt->fetchAll(PDO::FETCH_NAMED); and the given output in JSON is like this:

[
    {
        "name": [
            " name1",
            " name2",
            " name3"
        ],
        "date": "2022-02-05 12:00:00",
        "round": "3",
        "coordinate x": "number",
        "coordinate y": "number",
        "leauge_id": 4
    }, etc.

What i want to do is to replace fields coordinate x, coordinate y and insert into this array new field location(based on GoogleGeocodeAPI i will transofrm coordinates into location name) and insert it into this array so i will later be able to display this location.

Here is what i tried to do:

        $matches = $stmt->fetchAll(PDO::FETCH_NAMED);
        foreach ($matches as $match){
            $result['nameA'] = $match['name'][0];
            $result['nameB'] = $match['name'][1];
            $result['nameC'] = $match['name'][2];
            $result['date'] = $match['date'];
            $result['round'] = $match['round'];
            $result['leauge_id'] = $match['leauge_id'];
            $result['location']= $this->reverse_geocode($match['coordinate x'],$match['coordinate y']);
        }
        return $result;

Output from JSON:

{
    "nameA": " name",
    "nameB": " name",
    "nameC": " name",
    "date": "2022-02-05 12:00:00",
    "round": "29",
    "leauge_id": 6,
    "location": "location"
}

But it ends up that i`m kinda overwriting the posistion and in the end i am sending only one, the last record. How can i make this work?

Upvotes: 0

Views: 82

Answers (2)

Simon K
Simon K

Reputation: 1523

One way to do this is to create a variable $i and use that to key your array...

<?php

$matches = $stmt->fetchAll(PDO::FETCH_NAMED);

$i=0;

foreach ($matches as $match){
    $result[$i]['nameA'] = $match['name'][0];
    $result[$i]['nameB'] = $match['name'][1];
    $result[$i]['nameC'] = $match['name'][2];
    $result[$i]['date'] = $match['date'];
    $result[$i]['round'] = $match['round'];
    $result[$i]['leauge_id'] = $match['leauge_id'];
    $result[$i]['location']= $this->reverse_geocode($match['coordinate x'],$match['coordinate y']);
    $i++;
}

return $result;

Upvotes: 0

u_mulder
u_mulder

Reputation: 54831

$matches = $stmt->fetchAll(PDO::FETCH_NAMED);
foreach ($matches as $match){
    $result[] = [
        'nameA' => $match['name'][0],
        'nameB' => $match['name'][1],
        'nameC' => $match['name'][2],
        'date' => $match['date'],
        'round' => $match['round'],
        'leauge_id' => $match['leauge_id'],
        'location' => $this->reverse_geocode($match['coordinate x'],$match['coordinate y']),
    ];
}
return $result;

Upvotes: 2

Related Questions