我似乎遇到了php数组爆炸的问题,我似乎无法弄清楚为什么我在运行时得到1的计数,$ imgURL中有两个条目并且从我的阅读中我应该有一个有2个插槽的数组。我究竟做错了什么?
$imgURL = "../users/awmayhall/images/andrew1.jpg:../users/awmayhall/images/andrew2.jpg:";
$delimiter=":";
$itemList = array();
$itemList = explode($delimiter, $imgURL);
echo count(itemList);
for($i=0;$i<count(itemList);$i++)
{
echo"<img src='".$imageLocation."' longdesc='".$imageLocation."'/>";
}
答案 0 :(得分:5)
$缺失
echo count($itemList);
for($i=0;$i<count($itemList);$i++)
答案 1 :(得分:2)
应该是count($itemList);
,您忘记了变量之前的$
。除此之外,您的代码很好,但数组将包含3个元素(空元素)。因此,您应该删除字符串中的最后一个:
或检查每个元素,无论它是否为空。
此外,您不会在循环中对$i
执行任何操作。要么你这样做:
for($i=0;$i<count($itemList);$i++) {
if(!empty($itemList[$i])) {
echo"<img src='".$itemList[$i] ."' longdesc='".$itemList[$i]."'/>";
}
}
或使用foreach
:
foreach($itemList as $imageLocation) {
if(!empty($imageLocation) {
echo "<img src='".$imageLocation."' longdesc='".$imageLocation."'/>";
}
}
并且无需使用空数组初始化$itemList
。
如果您希望更清晰地分离HTML和PHP( 想要;)),请查看alternative syntax for control structures。
如何发现此类轻微错误:
在开发过程中,您应该将PHP的错误报告设置为E_ALL
。然后你会收到通知:
error_reporting(E_ALL);
echo count(itemList);
注意:使用未定义的常量itemList - 在第4行的/private/tmp/dashphp.txt中假定为'itemList' 1
如您所见,PHP将不存在的常量解释为字符串。 count
将返回1
字符串:
如果var不是数组或具有已实现
Countable
接口的对象,则将返回1。
答案 2 :(得分:2)
数组为$itemList
,但在创建后,您引用了一个不存在的常量itemList
。你丢失了$
。
$imgURL = "../users/awmayhall/images/andrew1.jpg:../users/awmayhall/images/andrew2.jpg:";
$itemList = explode(":", $imgURL);
foreach ($itemList as $item) {
echo '<img src="' . $item . '" longdesc="' . $item . '" />';
}
答案 3 :(得分:1)
您错过了项目列表中的$
。
试试这个:
<?php
$imgURL = "../users/awmayhall/images/andrew1.jpg:../users/awmayhall/images/andrew2.jpg:";
$delimiter=":";
$itemList = array();
$itemList = explode($delimiter, $imgURL);
foreach($itemList as $item)
{
echo"<img src='".$item."' longdesc='".$item."'/>";
}
?>
答案 4 :(得分:1)
因为您错过了之前的$
符号。
echo count(itemList);
应该是
echo count($itemList);
答案 5 :(得分:1)
您在$
echo count(itemList);
答案 6 :(得分:1)
PHP中的变量以美元符号开头。如果你遗漏它,它仍然是有效的PHP,但变量名被解释为常量;如果常量未定义,PHP会将其解释为字符串文字,即使您没有引用它。