2017-03-06 74 views
0

我有这样的代码

if (isset($_POST['submit2'])) 
{ 

    foreach ($_POST['check_list'] as $key) { 
    $input = implode(",", $key); 
    } 
} /*end is isset $_POST['submit2'] */ 


echo $input; 

它产生的错误“破灭():无效的参数传递”当我改变了内爆参数implode(",", $_POST['check_list'])它按预期工作。 有人可以澄清为什么吗?据我了解,$ key变量应该与$ _POST ['submit2']相同,不是像foreach那样吗?

很抱歉,如果这是一个愚蠢的问题,我是自学成才的,有时候这些细节很难在网上找到。

+4

在你的代码中,'$ key'是每次循环中'$ _POST ['check_list']'数组中的单个项目。'implode()'接受一个数组而不是一个字符串,所以只需使用'implode(“,”,$ _POST ['check_list'])'并且没有循环。 – AbraCadaver

+0

@AbraCadaver也许你应该是一个指向'implode'文档的答案。 – nbro

+0

你是否真的需要在每次有物品时爆破阵列?把它从循环中移出 – Miro

回答

1

你似乎在几个层次混淆,所以让我澄清其中的一些:

  1. 你说'就我所知,$ key变量应该与$ _POST ['submit2']相同,不是像foreach那样吗?'。答案是NO和NO: $key变量在foreach循环之外将包含存储在$_POST['check_list']中的数组的最后一个元素,$_POST['submit2']似乎只用于检查是否已设置,而代码段中没有其他内容。 foreach所做的就是遍历任何迭代器变量(在你的情况下是一个数组),并在你的情况下设置变量($key)中的当前项目。因此在循环之后,$key将包含该数组的最后一个元素。欲了解更多信息,请参阅文档:[http://php.net/manual/en/control-structures.foreach.php]

  2. implode期望第二个参数是一个数组,看起来你没有提供一个数组,但是任何其他类型。 $_POST['check_list']的最后一项实际上是一个数组吗?

  3. 如果您想将所有$_POST['check_list']项目“粘合”在一起,则不需要迭代,只需在该目录上使用implode即可:$input = implode(",", $_POST['check_list']);。否则,我不确定你想要做什么。

也许如果你解释你想要做什么,我们可以帮助更好。

+0

“如果您试图将$ _POST ['check_list']” “中的所有项目粘合在一起,那就是。我不知道implode()会循环遍历数组而不会将其放入循环中。我有时会发现PHP文档有点模糊。你的解释非常好。谢谢。 – Mar1ak

0

implode函数需要数组作为第二个参数。您将字符串值作为第二个参数传递。这就是为什么它不起作用。

+1

我的问题不是关于内爆函数bro。我知道它是如何工作的。我的问题是关于foreach $ key – Mar1ak

1

Foreach已经迭代你的值。您可以得到的价值,并从那里回音,或者你可以,如果它添加到另一个阵列input这就是你所需要的:

if (isset($_POST['submit2'])) 
{ 

    foreach ($_POST['check_list'] as $key => $value) { 
    $input[] = 'Value #'. $key .' is ' . $value; 
    } 
} 


echo implode(",", $input); 
+0

我实际上需要将该字符串从implode()插入到数据库中,所以根据您的代码我可以这样做是的? $ data = implode(“,”,$ input) – Mar1ak

+0

如果这就是你所需要做的,而不修改这些值,那么你甚至不需要'foreach'。只要执行'$ data = implode(“,”,$ _POST ['check_list']);'。 'foreach'用于在保存到数据库之前对数组进行更改。 – Miro

+0

是的,implode()在数组中循环而不必将其放入循环中的细节忽略了我。现在很清楚,现在的foreach也更清晰了。有时PHP文档对我来说有点模糊。非常感谢你的帮助! – Mar1ak

1

你在说$_POST['check_list']是一个数组,如果implode()适用于它,所以不需要循环获取单个项目。到implode()值:

echo implode(',', $_POST['check_list']); 

implode()键:

echo implode(',', array_keys($_POST['check_list'])); 

foreach()遍历的阵列,以暴露每个项目,并获得单独的值和任选的键一次一个:

foreach($_POST['check_list'] as $key => $val) { 
    echo "$key = $value<br />"; 
} 
+0

是的,implode()在数组中循环而不必将其放入循环中的细节跳过了我。现在很清楚,现在的foreach也更清晰了。有时PHP文档对我来说有点模糊。非常感谢你的帮助! – Mar1ak