Essentially I have the following PHP script that generates a response based on output of the query, I need the JSON to in a different format with each response listed sequentially:
JavaScript
x
<?php
$stmt = $pdo->prepare('
SELECT
`table1`.`id`,
`table1`.`option`
FROM `table1`
WHERE `table1`.`source` = 1
');
$stmt->execute([
]);
$row = $stmt->fetchAll(PDO::FETCH_ASSOC);
$rowcount = $stmt->rowCount();
if ($rowcount < 1)
{
$response["error"] = true;
echo json_encode($response);
}
else
{
$response['error'] = false;
$response['reasons'] = array_column($row, 'option', 'id');
echo json_encode($response);
}
?>
The current response look like this:
JavaScript
{
"error": false,
"reasons": {
"10": "Messy",
"23": "Damaged",
"48": "Other"
}
}
The response I am looking for:
JavaScript
{
"error": false,
"reasons": [
"1":{ "id": 10
"reason": "Messy"
}
"2":{ "id": 23
"reason": "Damaged"
}
"3":{ "id": 48
"reason": "Other"
}
]
}
How can this be achieved?’
UPDATE:
Calling: $response['reasons'] = $row;
Get the following result:
JavaScript
{
"error": false,
"reasons": [
{
"id": 10,
"reason": "Messy"
},
{
"id": 23,
"reason": "Damaged"
},
{
"id": 48,
"reason": "Other"
}
]
}
How can I get the sequential numbers to appear before the each row result?
JavaScript
"1":{
"id": 10,
"reason": "Messy"
},
Advertisement
Answer
If you need the indexes to start from 1 instead of 0, you need to write a loop that assigns the keys.
JavaScript
$reasons = [];
foreach ($row as $i => $r) {
$reasons[$i+1] = $r;
}
$response['reasons'] = $reasons;