Добавить данные цикла php в объект JSON - PullRequest
0 голосов
/ 12 февраля 2019

Мне нужны зацикленные данные php в шаблоне html, так что я знаю, что это как-то связано с 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 и просто добавляет одну строку из моего цикла?Может быть, я неправильно подхожу к этой ситуации?

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Вы не должны создавать строку самостоятельно, вы должны построить данные, а затем 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.

0 голосов
/ 12 февраля 2019

Вы устанавливаете свой $ dataArr внутри цикла while.Поэтому при каждом запуске цикла он будет перезаписываться.Кроме того, это имеет больше смысла и становится намного более понятным, когда вы обрабатываете его как массив (или объект) и затем конвертируете его в 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;
...