2012-01-15 121 views
0

我有一些代碼,以0-9之間產生4支獨特的隨機數: -PHP foreach循環僅輸出最後一個數組的鍵值

//Globals 
$arr = array(); 
$gridMax = 9; 
$i = 0; 


while (count($arr) < 4) { 
$x = mt_rand(0, $gridMax); 
    if (!in_array($x, $arr)) { 
     $arr[] = $x; 

     } 
} 

print_r($arr); 

我試圖創建一個網格,如果相應的格數是與我的數組中的4個唯一值中的一個相同,然後我希望它向$ build變量添加一些文本。如果沒有,什麼都不做: -

while ($i <= $gridMax) { 
foreach ($arr as $value) { 
    if ($value == $i) { 
     $build = "build"; 
    } else { 
     $build = ""; 
    } 

} 

echo "<li class=\"map\">{$build}</li>"; 
$i++; 
} 

然而,它僅適用於終值的最後一個鍵(如圖所示): -

http://www.kryptonite-dove.com/sandbox/mt_rand/

任何人都可以給我一些指點?我已經缺席了幾個月的編碼,而且我的頭腦有點模糊!

回答

1
while ($i <= $gridMax) 
{ 
    $build = ''; 
    if(in_array($i, $arr)) $build = 'build'; 

    echo "<li class=\"map\">{$build}</li>"; 
    $i++; 
} 
+0

這似乎更快,更容易在眼睛和更高效,所以標記爲答案。非常感謝所有。 – KryptoniteDove 2012-01-15 16:01:53

1

這個怎麼樣:

while ($i <= $gridMax) 
{ 
    $build = ''; 

    foreach ($arr as $value) 
    { 
     if ($value == $i) 
     { 
      $build .= "build"; 
     } 
     else   
     { 
      $build .= ""; 
     } 
    } 

    echo "<li class=\"map\">{$build}</li>"; 
    $i++; 
} 
+0

它的工作原理魅力的感謝狀!你能解釋爲什麼它對我來說是這樣嗎? – KryptoniteDove 2012-01-15 15:57:23

+2

我知道,我知道!假設$ i = 3,$ arr = [1,2,3,4]。在1和2的原始代碼中,它是錯誤的,因爲3 $構建變爲「構建」,但對於4,它又變爲「」。在這裏你追加到$ build而不是設置它。 – Misiur 2012-01-15 16:04:10