我有一个数据库,其中一些数据以json格式编码。我想输出一个HTML表,但当json编码的数据单元中的特定数据是一个数组时,我遇到了一个障碍。HTML表中的字段会输出单词"Array"以及"Notice:Array-to-string conversion in…"
我的代码使用MySQL语句来检索数据和常见的fetch数组运算符。用于呈现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"}
您可以用不同的方式管理它。您实际的方法是依赖于已经知道您获得的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攻击)
尝试加入值
<td>{$user_params['phone']}</td>
<td>{implode($user_params['ride_catagory'],',')}</td>