无法理解如何做这个循环结构

时间:2017-07-18 08:36:37

标签: php loops

有人可以通过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

请注意,每个element_y数字需要输出一次。所以代替:

0 - 1 - 1 - 1 - 2应 0 - 1 - 2

是否可以制作我的想法,或者我是否以完全错误的方式思考? :)非常感谢!

P.S。如果问题不够明确告诉我,我会改变我的问题!

2 个答案:

答案 0 :(得分:0)

我建议的内容如下:

通过element_yelement_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