2017-07-18 33 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