2014-06-24 66 views
1

你好,我在迭代數組塊時遇到了一些麻煩。在PHP中訪問一個數組塊

我正在試圖放置一個圖像庫,其中3個圖像的集合遵循一個模式,然後下一組的三個模式遵循相反的模式。我很確定我很接近,但我似乎無法弄清楚如何使用for循環選擇數組的第1,第2,第3等塊。

這是我的樣本集的print_r。

Array ( 
    [0] => Array ([0] => images/uploads/cardinal.png [1] => images/uploads/fb.png [2] => images/uploads/logo.png) 
    [1] => Array ([0] => images/uploads/masc.png [1] => images/uploads/sportclubslogo.png [2] => images/uploads/venue.jpg) 
) 

我那麼有兩種模式,其在特定模式打印出三張圖片,問題是我不能確定如何通過我的塊循環,並選擇找齊按照模式1和賠率按照模式2。下面是我目前使用的嘗試此代碼:

foreach($chunks as $chunk) { 
    print_r($chunk); 
    if($chunks % 2 == 0){ 
     echo "<div class='row'> 
      <div class='gal-img medium-8 large-8 columns'>"; 
       echo "<img src='".$chunk[0]."' alt='gallery1'/>"; 
     echo "</div> 
      <div class='gal-img medium-4 large-4 columns'>"; 
       echo "<img src='".$chunk[1]."' alt='gallery2'/>"; 
       echo "<img src='".$chunk[2]."' alt='gallery3'/>"; 
     echo "</div> 
      </div>"; 
    } 
    else { 
     echo "<div class='row'> 
      <div class='gal-img medium-4 large-4 columns'>"; 
       echo "<img src='".$chunk[0]."' alt='gallery4'/>"; 
       echo "<img src='".$chunk[1]."' alt='gallery5'/>"; 
     echo "</div>    
      <div class='gal-img medium-8 large-8 columns'>"; 
       echo "<img src='".$chunk[2]."' alt='gallery6'/>"; 
     echo "</div> 
    </div>"; 
    } 
} 

我仍然在重構foreach循環計劃,我只是想看看它的工作之前,我寫了兩個功能。我想實現的最終輸出類似於這樣:

|  || small | 
| Large || small | 
| small ||  | 
| small || Large | 

在此先感謝

+0

也許你指的是'chunk [index]'而不是'chunk' [index]' – user1978142

+0

這是100%的問題,圖片沒有顯示出來。<我將要實時編輯;但是,現在這些圖像只能通過else語句顯示出來。第一個數組塊應該跟隨if和第二個else,等等。 – wr3tched

+0

檢查出Jim的答案,應該對你的模數用法做一些說明,也許不用比較數組和模數,而是將它與數組的鍵「$ key%2 == 0」進行比較 – user1978142

回答

1

假設你的$塊陣列是迭代(不相關) - 這意味着你的陣列鍵是數字,您可以抓取索引像這樣:

foreach($chunks as $index => $chunk) { 
    if($index % 2 == 0) { 
     // stuff for even indexes 
    } else { 
     // stuff for odd indexes 
} 

您也可以玩弄$index % 3(每三個元素)等等。

+0

只是由於你的答案的清晰性,我會將其標記爲正確的,但對於任何可能閱讀此內容的人來說,一定要閱讀kevinabelita的評論。我認爲你不能將評論標記爲正確的答案。 – wr3tched

+0

@ wr3tched沒有擔心朋友,只是很高興它捨棄了一些光 – user1978142

+0

kevinabelita的下面的評論不清楚你要添加'$ key => $ chunk'片段 - 再加上,我想我錯過了他的評論,而我是寫我的答案,否則我會引用它。 – jsickles

1

你遍歷$chunks您的循環內的當前產品$chunk。但是,您正在使用$chunks

所以像:

echo "<img src='".$chunks[0]."' alt='gallery1'/>"; 

也許應該是:

echo "<img src='".$chunk[0]."' alt='gallery1'/>"; 

你做if語句類似的東西:

$chunks % 2 == 0 

還要注意,由於$chunk是一個數組您不能這樣做$chunk % 2,請嘗試count($chunk) % 2

+0

感謝關於迭代的註釋超過$ chunks而不是$ chunk。計數($ chunk)也只會輸出$ chunk中的數字,所以在這種情況下3. – wr3tched

+0

@ wr3tched啊,對不起。我誤解了。我認爲這是基於大塊中的條目。我會順從jsickles的答案。 – Jim

+0

完全不是問題,我欣賞快速幫助! – wr3tched

0

要在兩種設計之間切換,您不能做$chunks % 2 == 0。 相反,您可以將$i變量初始化爲0,然後在每個循環中迭代它。在這個$i上,你可以使用模數。

例子:

$i =0; 
foreach($chunks as $chunk) 
{ 
    print_r($chunk); 
    if($i % 2 == 0){ 
     // Design 1 
    } 
    else 
    { 
     // design 2 
    } 
    $i++; 
} 

要小心,你犯了一個錯誤,你想$chunk[0]來顯示圖像,而不是$chunks[0]

+0

我一定要在編輯中改變這一點。謝謝,給我一點時間,看看我是不是我想念的東西,儘管我相信它。 – wr3tched

+0

實際上你真的不需要另一個變量,而另一個增量,只需加上'$ key => $ chunk',然後'if($ key%2 == 0)'應該足夠了 – user1978142

+0

通過「=>」我認爲你的意思是$ key == $ chunk,還是我誤解了? *編輯*在foreach循環中無所謂就是你的意思。對不起,簡單的問題。 – wr3tched