php数组爆炸

时间:2011-01-28 10:03:11

标签: php

我似乎遇到了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."'/>";
}

7 个答案:

答案 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会将其解释为字符串文字,即使您没有引用它。