我有一个奇怪的问题,回应出一个会话数组。我想完成以下任务:
for($i=0;$i<sizeof($_SESSION['medication']);$i++){
echo $_SESSION['medication'][$i];
}
实际上它回显了数组的所有字段然后之后显示众所周知的错误消息“Catchable fatal error:类stdClass的对象无法转换为字符串”。
然而,当我只是在循环中回显字段0而不是字段$ i时,它可以正常工作而没有错误消息。
为什么会触发错误信息?
更新1
var_dump($_SESSION['medication'])
回应了一堆东西:
array(12) { [0]=> string(1) "1" [1]=> int(10) [2]=> string(2) "14" [3]=> string(2) "17" [4]=> object(stdClass)#1 (7) { ["id"]=> string(1) "1" ["name"]=> string(9) "AUGMENTIN" ["strength"]=> string(6) "875 mg" ["sig"]=> string(29) "1 tablet by mouth twice a day" ["quantity"]=> string(6) "twenty" ["refills"]=> string(4) "zero" ["treatmentfor"]=> string(17) "sinus, bronchitis" } [5]=> object(stdClass)#2 (7) { ["id"]=> string(2) "10" ["name"]=> string(8) "DIFLUCAN" ["strength"]=> string(6) "150 mg" ["sig"]=> string(47) "1 tablet by mouth as needed for yeast infection" ["quantity"]=> string(3) "one" ["refills"]=> string(3) "one" ["treatmentfor"]=> string(27) "yeast, other abx for female" } [6]=> object(stdClass)#3 (7) { ["id"]=> string(2) "14" ["name"]=> string(14) "MEDROL DOSEPAK" ["strength"]=> string(1) "-" ["sig"]=> string(135) "6 PO Qday x 1 day, then 5 PO Qday x 1 day, then 4 PO Qday x 1 day, then 3 PO Qday x1 day, then 2 PO Qday x 1 day then 1 PO Qday x 1 day" ["quantity"]=> string(2) "21" ["refills"]=> string(4) "zero" ["treatmentfor"]=> string(17) "allergic rhinitis" } [7]=> object(stdClass)#4 (7) { ["id"]=> string(2) "17" ["name"]=> string(23) "FLUTICASONE NASAL SPRAY" ["strength"]=> string(6) "0.0005" ["sig"]=> string(91) "1 spray each nostril twice a day, reducing to 1 spray per nostril per day when appropriate." ["quantity"]=> string(10) "one bottle" ["refills"]=> string(3) "one" ["treatmentfor"]=> string(17) "allergic rhinitis" } [8]=> object(stdClass)#5 (7) { ["id"]=> string(1) "1" ["name"]=> string(9) "AUGMENTIN" ["strength"]=> string(6) "875 mg" ["sig"]=> string(29) "1 tablet by mouth twice a day" ["quantity"]=> string(6) "twenty" ["refills"]=> string(4) "zero" ["treatmentfor"]=> string(17) "sinus, bronchitis" } [9]=> object(stdClass)#6 (7) { ["id"]=> string(2) "10" ["name"]=> string(8) "DIFLUCAN" ["strength"]=> string(6) "150 mg" ["sig"]=> string(47) "1 tablet by mouth as needed for yeast infection" ["quantity"]=> string(3) "one" ["refills"]=> string(3) "one" ["treatmentfor"]=> string(27) "yeast, other abx for female" } [10]=> object(stdClass)#7 (7) { ["id"]=> string(2) "14" ["name"]=> string(14) "MEDROL DOSEPAK" ["strength"]=> string(1) "-" ["sig"]=> string(135) "6 PO Qday x 1 day, then 5 PO Qday x 1 day, then 4 PO Qday x 1 day, then 3 PO Qday x1 day, then 2 PO Qday x 1 day then 1 PO Qday x 1 day" ["quantity"]=> string(2) "21" ["refills"]=> string(4) "zero" ["treatmentfor"]=> string(17) "allergic rhinitis" } [11]=> object(stdClass)#8 (7) { ["id"]=> string(2) "17" ["name"]=> string(23) "FLUTICASONE NASAL SPRAY" ["strength"]=> string(6) "0.0005" ["sig"]=> string(91) "1 spray each nostril twice a day, reducing to 1 spray per nostril per day when appropriate." ["quantity"]=> string(10) "one bottle" ["refills"]=> string(3) "one" ["treatmentfor"]=> string(17) "allergic rhinitis" } }
更新2
我发现了问题:在代码后面我使用变量$药物,这似乎是指会话。怎么会? register_globals是否开启?
更新3 - 找到解决方案 register_globals确实在(多么令人尴尬),我把它关掉了。它与其他变量$药物有关。现在它工作正常。谢谢大家!
答案 0 :(得分:1)
为什么要尝试使用for
循环数组? foreach
专门用于迭代数组。
尝试:
foreach($_SESSION['medication'] as $foo){
echo $foo;
}
您可能正如其他人所建议的那样在$_SESSION['medication']
中存储对象。您应该尝试var_dump($_SESSION['medication']);
来查看实际存储在那里的内容,如果其中有实际的对象(stdClass
),您需要在运行循环之前将其删除,因为您无法回显类。
编辑:
$_SESSION['medication'][4]
并且之后的所有元素都包含一个对象作为值,你必须做一些其他事情而不是回应它(尝试print_r像其他人所建议的那样)
答案 1 :(得分:1)
我的猜测是你在会话数组的索引中存储了一些字符串。在这种情况下,您似乎在数组中有一个stdClass
对象。
此外,由于您可以使用非数字数组索引,因此使用foreach循环将产生更好的结果。
foreach($_SESSION['medication'] as $index => $value) {
if (is_scalar($value)) {
echo "$index = $value<br />";
} else {
echo "<pre>$index = " . print_r($value, true) . "</pre><br />";
}
}
答案 2 :(得分:0)
该会话数组中的StdClass类型的对象无法回显
另外,使用foreach