从 PDO::FETCH_ASSOC 添加数组到 json 编码数组

add array to json encoded array from PDO::FETCH_ASSOC

我正在将所有产品类别从 db 和编码返回到 json,这工作正常,只是我想修改返回的 image_url 的值并添加 http:/ / 在后面,因为它不在数据库值中。

$catlist = $pdo->prepare("SELECT * FROM `categories`");
$catlist->execute();
while($Categories = $catlist->fetch(PDO::FETCH_ASSOC)){
$newArr[] = $Categories;
}
echo json_encode(array_values($newArr));

返回的数据是:

[{"id":"81","name":"My Cate", "image_url":"ginger.gif" },{"id":"82","name":"Jane Doe", "image_url": "offf.gif"}]

所以我的目标是将 http://x.com/ 连接到图像 url 对象数据。

您可以先修改数组,然后再将其添加到数组中:

$catlist = $pdo->prepare("SELECT * FROM `categories`");
$catlist->execute();
while($Categories = $catlist->fetch(PDO::FETCH_ASSOC)){
    $Categories['image_url'] = "http://x.com/".$Categories['image_url']; //<- Add this line
    $newArr[] = $Categories;
} 
echo json_encode(array_values($newArr));

另一种选择是使用 CONCAT 在您的查询中进行串联。那么你就不需要循环PHP中的结果了,你可以直接fetchAlljson_encode,然后输出。

$sql = "SELECT id, name, CONCAT('http://', image_url) AS image_url FROM categories";
$catlist = $pdo->query($sql);
$categories = $catlist->fetchAll(PDO::FETCH_ASSOC);
echo json_encode($categories);

你不需要使用循环,$newArray如果使用fetchall()它会return你的结果作为数组,你可以用两行实现你想要的

<?php
$catlist = $pdo->query("SELECT id,name,CONCAT('http://x.com/', image_url) AS imgURl FROM `categories`")->fetchall(PDO::FETCH_ASSOC);

echo json_encode(array_values($catlist));

?>