将php循环数据附加到JSON对象

问题描述 投票:0回答:2

我需要在html模板中循环php数据,所以我知道它与JSON有关,但不是JSON专家,在搜索网络时找不到太多帮助。

$uniqueFranchise_id = array_unique($franchise_id);
$dataArr = '[
    {
        "name": "Dylan",
        "page_link": "https://mypage.com/"
    }
   ]';
foreach($uniqueFranchise_id as $franchise)
{
    $sqlFranchise = "select * from franchise where franchise_id = $franchise";
    $resultFranchise = $conn->query($sqlFranchise);
    if($resultFranchise->num_rows > 0)
    {
        while($rowFranchise = $resultFranchise->fetch_assoc())
        {
           $dataArr = json_decode($data, TRUE);
           $dataArr[] = "['name'=>'".$rowFranchise['name']."', 'page_link'=>'".$rowFranchise['page_link']."']";
           //$json = json_encode($dataArr);
        }
    }
}

$json = json_encode($dataArr);
print_r($dataArr);

但它只附加一行。实际上它删除了已存在于我的dataArr中的数据,只是从我的循环中添加了一行?也许我接近这种情况完全错了?

php json loops append
2个回答
2
投票

在while循环中设置$ dataArr。因此,每次循环运行时,它都将被覆盖。此外,它更有意义,当您将其作为数组(或对象)处理并随后将其转换为JSON时,它会更加清晰。

$dataArr = array(array('name' => 'Dylan', 'page_link' => 'https://mypage.com/'));

foreach($uniqueFranchise_id as $franchise)
{
    $sqlFranchise = "select * from franchise where franchise_id = $franchise";
    $resultFranchise = $conn->query($sqlFranchise);
    if($resultFranchise->num_rows > 0)
    {
        while($rowFranchise = $resultFranchise->fetch_assoc())
        {
           $dataArr[] = array('name' => $rowFranchise['name'], 'page_link' => $rowFranchise['page_link']);
        }
    }
}

$json = json_encode($dataArr);
echo $json;

2
投票

你不应该自己构建字符串,你应该构建数据,然后JSON编码结果(代码中的注释)...

$dataArr = '[
    {
        "name": "Dylan",
        "page_link": "https://mypage.com/"
    }
   ]';
// decode existing JSON to start array
$dataArr = json_decode($data, TRUE);
foreach($uniqueFranchise_id as $franchise)
{
    // Read just the data you need from the table
    $sqlFranchise = "select name, page_link from franchise where franchise_id = $franchise";
    $resultFranchise = $conn->query($sqlFranchise);
    if($resultFranchise->num_rows > 0)
    {
        // Read all of the rows into an array
        $newData = $resultFranchise->fetch_all(MYSQLI_ASSOC);
        // Add in existing data
        $dataArr = array_merge($dataArr, $newData);
    }
}

// Now encode the list of elements into 1 string
echo json_encode($dataArr);

如果不信任此数据以停止SQL注入,您还应该查看预准备语句。

© www.soinside.com 2019 - 2024. All rights reserved.