有人可以通过SELECT
(或更多,如果需要)和一些php loops
来帮助我。我现在一直试图提出解决方案2天。
我使用的这12个列网格是movable
和resizable
。我存储了它的数据,例如 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
。
此示例结构将在我的可调整大小的网格中显示:
到目前为止,我已将此问题发送到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
请注意,每个element_y数字需要输出一次。所以代替:
0 - 1 - 1 - 1 - 2应 0 - 1 - 2
是否可以制作我的想法,或者我是否以完全错误的方式思考? :)非常感谢!
P.S。如果问题不够明确告诉我,我会改变我的问题!
答案 0 :(得分:0)
我建议的内容如下:
通过element_y
和element_x
确认您的SQL订单:
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
答案 1 :(得分: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