2017-03-06 44 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