从 $_GET 开始的 foreach 循环正在添加奇怪的值


foreach loop from $_GET is adding strange values

我有以下一段代码,应该从有人安装Facebook标签时返回的URL创建一个逗号分隔的字符串:

$tabs_added = $_GET['tabs_added'];
$tabs_added_array = array();
foreach($tabs_added as $key => $value){
    $tabs_added_array[] = $key;
}
$the_tabs = implode(',', $tabs_added_array);

该页面由Facebook调用并返回,如下所示:

tabs.php?tabs_added[1202358366491085]=1&tabs_added[144695175064017]=1
&tabs_added[676066073448810]=1#_=_

出于某种奇怪的原因,它生成的字符串是:

1202358366491085,144695175064017,676066073448810,0,1,2

如您所见,开头是正确的,但随后它无缘无故地增加了0,1,2。为什么会这样,我怎样才能避免这种情况?

你的数组看起来像这样:

[0]=>[1202358366491085]
[1]=>[144695175064017]
[2]=>[676066073448810]

尝试一下:var_dump($tabs_added_array);

字符串得到两者。但是,您显示的代码不会生成数组的索引。

我自己测试过这个,这是我拥有的 URL:

test.php?
tabs_added[1202358366491085]=1&tabs_added[144695175064017]=1
&tabs_added[676066073448810]=1#_=_

和我的代码:

$tabs_added = $_GET['tabs_added'];
$tabs_added_array = array();
foreach($tabs_added as $key => $value){
    $tabs_added_array[] = $key;
}
$the_tabs = implode(',', $tabs_added_array);
var_dump($tabs_added_array);

无论您是否知道,代码中一定还有其他内容,您都没有向我们展示。

我最终这样做是为了解决我的问题:

foreach($tabs_added_array as $key => $val) {
    if(strlen($val) <= 3)
        unset($tabs_added_array[$key]);
}

是的,这是一个肮脏的修复。但我不知道还能怎么做。它没有解决问题,但它是一个解决方案。