2013-05-01 24 views
-1

我必須從具有信息的「塊」狀循環而數組項存在PHP

$array = array(id1 => 1 
       title1 => this title 
       id2 => 2 
       title2 => this title 2) 

我公司通過數組試圖循環,像這樣

$num = 1; 
$posid = "id" . $num; 
while (array_key_exists($posid, $_POST)) { 
    echo $posid . "<br>"; 
    $num++; 
} 

,但我一種形式的數組不斷陷入無限循環。我哪裏錯了?

+1

$ posid在循環中不會改變 – AlucardTheRipper 2013-05-01 17:55:30

+0

-1:您從未更改'$ posid' ...您的'echo'應該清楚地說明。 – 2013-05-01 17:59:25

+1

@LightnessRacesinOrbit我不會因爲製造菜鳥錯誤而使他失望。這是來自新開發人員的一個公平問題。 +1 – Matthew 2013-05-01 18:00:04

回答

1

你的問題是你不重新定義循環中的$posid。你應該這樣做:

$num = 1; 
$posid = "id" . $num; 
while (array_key_exists($posid, $_POST)) { 
    echo $posid . "<br>"; 
    $num++; 
    $posid = "id" . $num; 
} 

不過,我想提出一個完全不同的方法。任何時候你發現自己POST操作變量是這樣的:

id1 
id2 
id3 
... 

的機會,你會得到更好的適合於使用輸入字段中的數組訪問表示法。

<input name="id[]" ... /> 

這將允許PHP將具有該名稱的字段的所有值聚合到POST中的數組中。

然後,您可以做類似

foreach ($_POST['id'] as $id) { 
    ... 
} 
+0

超級謝謝你們幫助我的很多@barmar你的回覆幫助,我會給你的蜱這麼說,但邁克措詞更好一點是你都給了我一些工作,謝謝很多 – jaggysnake 2013-05-01 18:13:54

0

你是一個無限循環,因爲如果它在陣列中存在,你永遠從陣列中移除它,你永遠更新您詢問變量的值。

因此,每當while循環得到評估,它將是true,因爲它是重複測試相同的條件。

您的意思是從數組中刪除$ posid嗎?你的意思是更新它嗎?

+0

我認爲他的意思是在循環內執行'$ posid'賦值,所以它得到更新後的'$ num'。 – Barmar 2013-05-01 17:56:34

+1

@Barmar無論他打算做什麼....他的無限循環是因爲他沒有改變詢問變量。 – Matthew 2013-05-01 17:58:40

1

你需要增加$num後更新$posid

$num = 1; 
$posid = "id" . $num; 
while (array_key_exists($posid, $_POST)) { 
    echo $posid . "<br>"; 
    $num++; 
    $posid = "id" . $num; 
} 

它可能會更好,如果你被點名了使用數組方式,例如,您的表單字段<input name="id[]" ...>。那麼$_POST['id']將是一個數組,而不是單獨的元素。