2012-09-12 89 views
1

我會開始說我真的是PHP的noob,我需要解決一個問題,我知道邏輯,但是在語法上我已經死了。PHP數組問題

這是這種情況。

我需要創建一個wordpress循環,它將顯示帶有3種不同顏色的跨度類的圖像,每個循環1個,所以它會變成0 =綠色,1 =藍色,2 =粉紅色。由於我有3種顏色的X個輸出,我想創建一個從0到2的數組,根據我描述的顏色賦值,然後創建一個條件,如果我> 2,然後我= 0.

有了這個,我只是回聲我的跨班的數組值,應該做的伎倆。

我需要創造這樣做的syntaxys幫助,到目前爲止,這是我有:

<?php while (have_posts()) : the_post(); $i = 0 ?> 
<?php 
    $array = array(
     0 => 'green', 
     1 => 'blue', 
     2 => 'pink', 
    ); 
    ?> 
<span class="<?php echo $array ?>;">Title</span> 

<?php 
    $i++; 
?> 
<?if ($i > 2) { $i=0; } endif; ?> 
<?php endwhile; ?> 

我錯過了,我應該用我的陣列比較計數器的一部分。

我會感謝任何幫助!

在此先感謝。

回答

2

有幾個問題與這段代碼(以及一些建議)。

  • 你被定義$i = 0; while循環中這意味着它總是== 0
  • 你要打印的$array,而不是一個項目

如何修復

  • 在while循環之外移動$i = 0;(所以它在循環之前定義)
  • 使用echo $array[$i]呼應你正在尋找
  • 項目編號使用模運算符來獲得的$i/3其餘部分並使用它作爲你的索引

你也

  • 定義在一行$colors = array('green', 'blue', 'pink');上的數組將會表現相同 - 這適用於PHP使用從0開始的默認索引
  • 使用變量如$colors而不是$array,以使其更清晰這是怎麼回事
  • 減少<?php標籤量讓事情更清晰
  • 定義循環外的數組(現在叫$colors

請參見下面的完整代碼

<?php 
    $colors = array(
    0 => 'green', 
    1 => 'blue', 
    2 => 'pink', 
); 

    $i = 0; 
    while ($loop->have_posts()) : $loop->the_post();  
?> 
<span class="<?php echo $colors[$i % 3] ?>;">Title</span> 
<?php 
    $i++; 
    endwhile; 
?> 

而且進一步簡化

<?php 
    $colors = array('green', 'blue', 'pink'); 
    $i = 0; 
    while ($loop->have_posts()) : $loop->the_post();  
?> 
    <span class="<?php echo $colors[$i % 3] ?>;">Title</span> 
<?php 
    $i++; 
    endwhile; 
?> 
+0

哇!這完美的技巧,謝謝你的幫助! :) – andresmijares25

1

您打印整個$array,而不是單個數組元素(這是$array[$i]),你也是你while循環內重置計數器($i = 0):

<?php  
    // a little bit cleaned up version of your code 
    $array = array(
     0 => 'green',  
     1 => 'blue',  
        2 => 'pink', 
    );  

    $i = 0; 
    while ($loop->have_posts()) : $loop->the_post(); 
?> 
    <span class="<?php echo $array[$i] ?>;">Title</span> 
<?php 
    $i++; 
    if ($i > 2) { $i=0; } 

    endwhile; 
?> 
2

首先,每次運行循環時都要重新聲明$array。在啓動while循環之前先說明這一點。

其次,您需要訪問該元素的數組內,使用索引:

​​

第三,你需要把$i = 0之前while循環。這裏發生的是$i變量每次都重置爲0