英文:
Issue With An Unserialized Array display in A Loop
问题
我在MYSQL中存储了一个序列化数组。我正在使用下面的代码反序列化然后在表格<td>中显示。代码运行正常,但值在每一行中合并在一起。假设,第一行的值是3,第二行的值是4,那么第一行显示3,这是正常的,但第二行显示3,4,类似地,第一行的值与其他行的值合并在一起。请协助。
谢谢
代码:
$abc = '';
foreach ($result as $row) {
$fine_types = unserialize($row['fine_type']);
echo "<td>";
foreach ($fine_types as $fine_type) {
$abc .= "<div dir='rtl' lang='ar' class='fntype'>" . $fine_type . '</div>';
}
echo "</td>";
$output .= '
<tr>
<td style="text-align:right;">' . $abc . '</td></tr>';
}
echo $output;
生成的序列化字符串示例
a:3:{i:0;s:177:"66 - عدم تخزين وحفظ المواد الغذائية الجافة والمبردة والمجمدة في درجة مناسبة حرارة مناسبة لكل نوع";i:1;s:76:"13 - عدم وجود لوحة إعلانية بالاسم التجاري";i:2;s:63:"9 - إضافة فرع أو مستودع بدون ترخيص";}
上述字符串的反序列化格式
66 - عدم تخزين وحفظ المواد الغذائية الجافة والمبردة والمجمدة في درجة مناسبة حرارة مناسبة لكل نوع,
13 - عدم وجود لوحة إعلانية بالاسم التجاري,
9 - إضافة فرع أو مستودع بدون ترخيص
英文:
Referring to my question:
https://stackoverflow.com/questions/76685765/displaying-serialized-array-php-mysql?noredirect=1#comment135242308_76685765
I have a serialized array stored in MYSQL. I am unserializing and then displaying in table <td> using below code. The code works fine but values are merged in each row. Suppose, ist row had value 3 and second row had value 4 then ist row display 3, which is fine but second row shows 3,4 and similarly, ist row values are merged with other row values.
Please assist.
Thanks
Code:
$abc='';
foreach($result as $row)
{
$fine_types = unserialize($row['fine_type']);
echo "<td>";
foreach ($fine_types as $fine_type) {
$abc .="<div dir='rtl' lang='ar' class='fntype'> ".$fine_type.'</div>';
//$r=implode(',')
}
echo "</td>";
`$output .= '
<tr>
<td style="text-align:right;">' . $abc . '</td></tr>';
}
echo $output;`
Example of A Generated serialized String
a:3:{i:0;s:177:"66 - عدم تخزين وحفظ المواد الغذائية الجافة والمبردة والمجمدة في درجة مناسبة حرارة مناسبة لكل نوع";i:1;s:76:"13 - عدم وجود لوحة إعلانية بالاسم التجاري";i:2;s:63:"9 - إضافة فرع أو مستودع بدون ترخيص";}
Above String in Unserialized Format
66 - عدم تخزين وحفظ المواد الغذائية الجافة والمبردة والمجمدة في درجة مناسبة حرارة مناسبة لكل نوع,
13 - عدم وجود لوحة إعلانية بالاسم التجاري,
9 - إضافة فرع أو مستودع بدون ترخيص
答案1
得分: 0
如果我理解正确,现在的问题是在处理后续行时,它会将先前的$row
内容的输出添加到您的输出中,导致出现我们在此实时演示中看到的问题:https://3v4l.org/eXXRX。
如果是这样,那是因为在外部foreach
执行时$abc
没有被重置。您可以通过将$abc = '';
移动到该循环内部来轻松解决这个问题:
foreach ($result as $row)
{
$abc = '';
$fine_types = unserialize($row['fine_type']);
echo "<td>";
foreach ($fine_types as $fine_type) {
$abc .= "<div dir='rtl' lang='ar' class='fntype'> " . $fine_type . '</div>';
}
echo "</td>";
$output .= '
<tr>
<td style="text-align:right;">' . $abc . '</td></tr>';
}
echo $output;
已更正的演示:https://3v4l.org/vCQ5V
英文:
If I understand correctly now, the problem is that it keeps adding the output of previous $row
contents into your output when it processes subsequent rows, resulting in a problem like we see in this live demo: https://3v4l.org/eXXRX.
If so, that is because $abc
is not reset each time the outer foreach
is executed. You can easily fix that by moving $abc='';
inside that loop:
foreach($result as $row)
{
$abc='';
$fine_types = unserialize($row['fine_type']);
echo "<td>";
foreach ($fine_types as $fine_type) {
$abc .="<div dir='rtl' lang='ar' class='fntype'> ".$fine_type.'</div>';
}
echo "</td>";
$output .= '
<tr>
<td style="text-align:right;">' . $abc . '</td></tr>';
}
echo $output;
Demo with correction: https://3v4l.org/vCQ5V
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论