2017-07-18 32 views
1

有人可以幫助我的方式與SELECT(或更多,如果需要)和一些PHP loops。我一直在努力想出一個解決方案2天。不知道如何做這個循環結構

這是我使用的12列格,它是movableresizable。我存儲它的數據,如x軸,y-axix,寬度,高度

這裏是數據庫表elements的例子:

| id | page_id | element_type | element_x | element_y | width | height | element_content 
---------------------------------------------------------------------------------------- 
| 45 | 1  | title  | 0   | 0   | 12 | 1  | Content 
| 70 | 1  | button  | 6   | 2   | 6  | 1  | Content 
| 23 | 1  | form   | 4   | 1   | 4  | 1  | Content 
| 55 | 1  | rich-textfield 0   | 1   | 4  | 1  | Content 
| 101| 1  | gallery  | 8   | 1   | 4  | 1  | Content 

正如你所看到的高度並不重要,因爲它總是1。到目前爲止

a busy cat

我這SELECT電網項目:

這個例子結構將在我的可調整大小的網格顯示此

$id = 1; 
$selectElements = $conn->prepare("SELECT * FROM `elements` WHERE `page_id` = :id"); 
$selectElements->bindParam(':id', $id, PDO::PARAM_STR); 
$selectElements->execute(); 

我心目中是一樣的東西

foreach element_y 

    <div class="row"> 

     // loop to loop thru all element_x's per element_y 

    </div> 

endforeach 

請注意ev每個元素只需輸出一次。所以不是:

0 - 1 - 1 - 1 - 2應該是0 - 1 - 2

是否有可能做什麼我心目中還是我的思維完全錯誤的方式? :)高度讚賞!

P.S.如果問題不夠清楚告訴我,我會改變我的問題!

回答

0

我建議沿東西線以下:

確保您的SQL命令通過element_yelement_x

SELECT * FROM `elements` 
    WHERE `page_id` = :id 
    ORDER BY `element_y` ASC, `element_x` ASC 

這樣一來,你就一定要有正確的順序已經。

然後,將您的陣列到一個稍微不同的結構是這樣的:

$elements_grouped = []; 

foreach ($elements as $key => $element) { 
    $elements_grouped[$element['element_y']][$key] = $element; 
} 

那會把你的數組中的元素與element_y鍵拿着各自的元素。

然後,您可以遍歷的是,在超過元素的第二循環迴路(使用僞代碼):

foreach elements_grouped as row 

    <div class="row"> 

     foreach row as element 
      // output element 
     endforeach 

    </div> 

endforeach 
+0

s是一個真正偉大的解決方案!除了一件事之外,我得到了它的工作:第一個元素不在循環中。我有5個元素需要循環,但只能得到4 – joostdelange

+0

@joostdelange這將是很難調試沒有實際的代碼和數據。我建議你在轉換之前和之後var_dump你的元素,然後嘗試找出錯誤的位置。 – mvuajua

+0

最後我發現問題是:'$ row = $ selectElements-> fetch(PDO :: FETCH_ASSOC);'由於某種原因導致跳過第一行 – joostdelange

0

您應該使用多維數組(鍵和值)來處理所有數據第一

$handleData = array(); 
foreach($result as $item){ 
    $handleData[$item['element_y'] => array(
     $item['element_x'] => array(
      'element_type' => $item['element_type'], 
      'width' => $item['width '], 
      'element_content' => $item['element_content'] 
     ) 
    ) 
} 

在此之後,你只需要打印輸出$ handleData