Я был на этом почти целых 24 часа.

Я не кодер, и я не притворяюсь, у меня просто есть проблема, которую я не могу решить, с которой мне нужна ваша помощь :)

У меня есть столбец базы данных, полный широты и долготы. Я хочу создать файл с именем points.json, который соответствует следующему формату:

{
  "points": [
    [LAT, LONG],
    [LAT, LONG],
    [LAT, LONG],
    [LAT, LONG],
    [LAT, LONG]
  ]
}

Где LAT и LONG - записи из базы данных (52.93839800000001, -1.1425212999999999)

Мой текущий код получает все местоположения из базы данных и выводит на экран по одному широте / длине на строку:

$sql = "SELECT latlong from requests";
$result = $con->query($sql);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo $row['latlong'] . "<br>";
    }
} else {
    echo "0 results";
}
$con->close();

Структура таблицы:

|id|user|       latlong          |
----------------------------------
|1|user|52.93839801,-1.1425212999|

Я просто не могу работать, чтобы получить его в вышеуказанном формате. Я пробовал несколько различных методов json_encode, но в конечном итоге с отдельным массивом JSON для каждой строки?

В конечном итоге я хочу сгенерировать файл в указанном выше формате на лету, содержащий ссылки на местоположение, сохраненные в столбце / строке базы данных.

Заранее спасибо.

-2
user3292963 21 Авг 2018 в 13:05

3 ответа

Лучший ответ

Попробуйте взорвать свой latlong и поместить значения в массив.

$sql = "SELECT latlong from requests";
$result = $con->query($sql);

$points = array();

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
       $points[] = explode(',', $row['latlong']);

    }
} 

$con->close();

echo json_encode(array('points' => $points));
2
Bert Maurau 21 Авг 2018 в 10:40

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

$sql = "SELECT latlong from requests";
$result = $con->query($sql);


$points = array();
$i=0;
if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        $latlong = explode(",", $row['latlong']);

        $points['points'][$i] = $latlong;
        $i++;
    }
}

print_r((json_encode($points)));
0
Preeti 21 Авг 2018 в 10:49

Если вы используете более новую версию MySQL, попробуйте следующее:

SELECT JSON_OBJECT(
        'points', JSON_ARRAYAGG(
            JSON_ARRAY(LAT, LONG)
        )
FROM yourTable;

Если это не поможет, поделитесь структурой таблицы и версией базы данных. Если вы хотите попробовать сами, ознакомьтесь с json_encode PHP ()

0
DataVader 21 Авг 2018 в 10:46
51946285