在php奇怪的输出中通过一个explode()循环

时间:2012-10-07 16:21:38

标签: php arrays explode

当我尝试在PHP中循环逗号分隔列表时,我得到了一个非常奇怪的结果。

它有时只输出其中的一些,似乎没有合理的理由说明为什么它不会遍历所有这些,我不能为我的生活弄清楚究竟是什么造成了它。

我的代码是:

    //pids = &pids=1,2,3,6,7,9
    $pids = $_GET['pids'];
    $photoIdArray = explode(",", $pids);


    for($i = 0; $i <= count($photoIdArray); $i++) {

        foreach($photoIdArray as $j){
            if($i == $j){

                echo "{$j}";

            }
        }

    }

    // result = 1236

这仅用于测试,因此我不会检查输入以防止漏洞利用,以及目前还没有。

任何帮助都将不胜感激。

谢谢!

3 个答案:

答案 0 :(得分:3)

将2循环forforeach结合起来对于像这样的事情来说是过度的

请尝试仅使用foreach

$pids = "1,2,3,6,7,9";
$photoIdArray = explode(",", $pids);
foreach($photoIdArray as $value)
{
    echo $value;
}

输出

 123679

答案 1 :(得分:0)

这是因为您循环遍历您的值并检查$ i是否与值相同。你应该检查

if ($photoIdArray[$i] == $j) {

而不是

if ($i == $j) {

这就是它不起作用的原因,但你仍然应该使用Baba的方法。

答案 2 :(得分:0)

我同意Dusan,Baba&amp;但是要回答实际的问题:

这里没有什么奇怪的事情发生。 i从0循环到6(尽管数组只有索引0..5),你将i与数组的VALUES进行比较,范围从1到9.当然,只有值1到6匹配,因为我从未超过6岁。

编辑:Asad和Sietse更快。