1

尝试在 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

这只是为了测试,所以我没有检查输入以防止漏洞利用,目前还没有。

任何帮助,将不胜感激。

谢谢!

4

3 回答 3

3

结合 2 个循环forforeach对于这样的事情来说太过分了

尝试仅使用foreach

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

输出

 123679
于 2012-10-07T16:23:29.453 回答
0

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

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

代替

if ($i == $j) {

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

于 2012-10-07T16:29:41.127 回答
0

我同意 Dusan, Baba & Co. 的观点,但要回答实际问题:

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

编辑: Asad 和 Sietse 更快。

于 2012-10-07T16:31:49.303 回答