数组的json_decode在HTML输出中无法正确呈现

时间:2015-02-18 12:35:01

标签: php mysql arrays json

我有一个数据库,其中一些数据以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"}

2 个答案:

答案 0 :(得分:0)

尝试加入值

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

答案 1 :(得分:0)

你可以用不同的方式管理这件事。 你实际的方式是依赖于知道你得到的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攻击