簡體   English   中英

數組的json_decode在HTML輸出中無法正確呈現

[英]json_decode of array not rendering correctly in HTML output

我有一個數據庫,其中一些數據以json格式編碼。 我想輸出一個HTML表格,但當json編碼數據單元格中的特定數據是一個數組時,我遇到了障礙。 為“HTML表”中的字段輸出“Array”一詞以及“Notice:Array to string conversion in ...”。

我的代碼使用MySQL語句來檢索數據和通常的提取數組運算符。 用於呈現json編碼數據的特定代碼是:

$user_params = json_decode($row['params'], true);

並創建輸出:

<td>{$user_params['phone']}</td>
<td>{$user_params['ride_catagory']}</td>

上面的第一行正確呈現,因為數據被編碼為單個文本字符串,但是,第二行給出了“數組”和消息,因為它被編碼為json數據中的數組。 我怎樣才能解決這個問題?

以下是'params'數據庫字段的內容:

{"phone":"444-336-5678","birth_year":"1965","volunteer":[""],"ride_catagory":["10-12","13-15","16 plus"],"ride_note":"on","membership_visible":"on"}

嘗試加入這些值

<td>{$user_params['phone']}</td>
<td>{implode($user_params['ride_catagory'],',')}</td>

你可以用不同的方式管理這件事。 你實際的方式是依賴於已經知道你得到的array的鍵,所以我猜你也可以假設你知道其中的內容類型。 如果您知道類型,那么當您知道元素的內容也是array時,您可以執行特定的行為

<?php
$row = array(
    'params' => '{"phone":"444-336-5678","birth_year":"1965","volunteer":[""],"ride_catagory":["10-12","13-15","16 plus"],"ride_note":"on","membership_visible":"on"}'
);
$user_params = json_decode($row['params'], true);
?>

然后像(以一種非常盲目的方式):

<td><?= $user_params['phone']; ?></td>
<td><?= implode($user_params['ride_catagory'],', '); ?></td>

或者喜歡(概念上更好):

<td><?= $user_params['phone']; ?></td>
<td>
    <?php
        if(is_array($user_params['ride_catagory'])) {
            echo '<table><tr>'.PHP_EOL;
            foreach ($user_params['ride_catagory'] as $category) {
                echo sprintf('<td>%s</td>'.PHP_EOL, $category);
            }
            echo '</tr></table>';
        } else {
            echo $user_params['ride_catagory'];
        }
    ?>
</td>

這一切都取決於您希望代碼的靈活性 (即使您不知道數組元素將包含哪種類型的數據也能工作)。

注意

我想補充一點, 如果你沒有驗證它們你不應該直接打印輸出值 (否則你會暴露自己的XSS攻擊

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM