Php 将数组数据准备到另一个结构的算法,以便使用某些规则呈现定义的HTML输出
请注意,很长一段时间以来,我没有成功地找到解决这个(对我来说非常困难)问题的方法,我非常感谢您的帮助: 1) 我有这样的简单数组中的数据,没有问题:Php 将数组数据准备到另一个结构的算法,以便使用某些规则呈现定义的HTML输出,php,html,Php,Html,请注意,很长一段时间以来,我没有成功地找到解决这个(对我来说非常困难)问题的方法,我非常感谢您的帮助: 1) 我有这样的简单数组中的数据,没有问题: $data = array( array('id => 1', 'name' => 'Some name 1'), array('id => 2', 'name' => 'Some name 2'), array('id => 3', 'name' => 'Some name 3'),
$data = array(
array('id => 1', 'name' => 'Some name 1'),
array('id => 2', 'name' => 'Some name 2'),
array('id => 3', 'name' => 'Some name 3'),
...
);
2) 但我必须将上面显示的数据呈现为HTML结构,理论上非常类似于树结构,其中每个父节点最多有4片叶子,每个节点可以成为接下来4个子节点的父节点(对树深度没有任何限制)
a) 因此,如果我的数组中只有4个项目,则网站上呈现以下内容:
<div class="group">
<div class="group"><a href="#">Item 1</a></div>
<div class="group"><a href="#">Item 2</a></div>
<div class="group"><a href="#">Item 3</a></div>
<div class="group"><a href="#">Item 4</a></div>
</div>
b) 在第5种情况下,应如下所示:
<div class="group">
<div class="group"><a href="#">Item 1</a></div>
<div class="group"><a href="#">Item 2</a></div>
<div class="group"><a href="#">Item 3</a></div>
<div class="group">
<div class="group"><a href="#">Item 4</a></div>
<div class="group"><a href="#">Item 5</a></div>
</div>
</div>
<div class="group">
<div class="group"><a href="#">Item 1</a></div>
<div class="group"><a href="#">Item 2</a></div>
<div class="group">
<div class="group"><a href="#">Item 3</a></div>
<div class="group"><a href="#">Item 4</a></div>
</div>
<div class="group">
<div class="group"><a href="#">Item 5</a></div>
<div class="group"><a href="#">Item 6</a></div>
</div>
</div>
<div class="group">
<div class="group">
<div class="group"><a href="#">Item 1</a></div>
<div class="group"><a href="#">Item 2</a></div>
<div class="group"><a href="#">Item 3</a></div>
<div class="group"><a href="#">Item 4</a></div>
</div>
<div class="group">
<div class="group"><a href="#">Item 5</a></div>
<div class="group"><a href="#">Item 6</a></div>
<div class="group"><a href="#">Item 7</a></div>
<div class="group"><a href="#">Item 8</a></div>
</div>
<div class="group">
<div class="group"><a href="#">Item 9</a></div>
<div class="group"><a href="#">Item 10</a></div>
<div class="group"><a href="#">Item 11</a></div>
<div class="group"><a href="#">Item 12</a></div>
</div>
<div class="group">
<div class="group"><a href="#">Item 13</a></div>
<div class="group"><a href="#">Item 14</a></div>
<div class="group"><a href="#">Item 15</a></div>
<div class="group"><a href="#">Item 16</a></div>
</div>
</div>
<div class="group">
<div class="group">
<div class="group"><a href="#">Item 1</a></div>
<div class="group"><a href="#">Item 2</a></div>
<div class="group"><a href="#">Item 3</a></div>
<div class="group">
<div class="group"><a href="#">Item 4</a></div>
<div class="group"><a href="#">Item 5</a></div>
</div>
</div>
<div class="group">
<div class="group"><a href="#">Item 6</a></div>
<div class="group"><a href="#">Item 7</a></div>
<div class="group"><a href="#">Item 8</a></div>
<div class="group">
<div class="group"><a href="#">Item 9</a></div>
<div class="group"><a href="#">Item 10</a></div>
</div>
</div>
<div class="group">
<div class="group"><a href="#">Item 11</a></div>
<div class="group"><a href="#">Item 12</a></div>
<div class="group"><a href="#">Item 13</a></div>
<div class="group">
<div class="group"><a href="#">Item 14</a></div>
<div class="group"><a href="#">Item 15</a></div>
</div>
</div>
<div class="group">
<div class="group"><a href="#">Item 16</a></div>
<div class="group"><a href="#">Item 17</a></div>
<div class="group"><a href="#">Item 18</a></div>
<div class="group">
<div class="group"><a href="#">Item 19</a></div>
<div class="group"><a href="#">Item 20</a></div>
<div class="group"><a href="#">Item 21</a></div>
</div>
</div>
</div>
c) 在第6种情况下,应如下所示:
<div class="group">
<div class="group"><a href="#">Item 1</a></div>
<div class="group"><a href="#">Item 2</a></div>
<div class="group"><a href="#">Item 3</a></div>
<div class="group">
<div class="group"><a href="#">Item 4</a></div>
<div class="group"><a href="#">Item 5</a></div>
</div>
</div>
<div class="group">
<div class="group"><a href="#">Item 1</a></div>
<div class="group"><a href="#">Item 2</a></div>
<div class="group">
<div class="group"><a href="#">Item 3</a></div>
<div class="group"><a href="#">Item 4</a></div>
</div>
<div class="group">
<div class="group"><a href="#">Item 5</a></div>
<div class="group"><a href="#">Item 6</a></div>
</div>
</div>
<div class="group">
<div class="group">
<div class="group"><a href="#">Item 1</a></div>
<div class="group"><a href="#">Item 2</a></div>
<div class="group"><a href="#">Item 3</a></div>
<div class="group"><a href="#">Item 4</a></div>
</div>
<div class="group">
<div class="group"><a href="#">Item 5</a></div>
<div class="group"><a href="#">Item 6</a></div>
<div class="group"><a href="#">Item 7</a></div>
<div class="group"><a href="#">Item 8</a></div>
</div>
<div class="group">
<div class="group"><a href="#">Item 9</a></div>
<div class="group"><a href="#">Item 10</a></div>
<div class="group"><a href="#">Item 11</a></div>
<div class="group"><a href="#">Item 12</a></div>
</div>
<div class="group">
<div class="group"><a href="#">Item 13</a></div>
<div class="group"><a href="#">Item 14</a></div>
<div class="group"><a href="#">Item 15</a></div>
<div class="group"><a href="#">Item 16</a></div>
</div>
</div>
<div class="group">
<div class="group">
<div class="group"><a href="#">Item 1</a></div>
<div class="group"><a href="#">Item 2</a></div>
<div class="group"><a href="#">Item 3</a></div>
<div class="group">
<div class="group"><a href="#">Item 4</a></div>
<div class="group"><a href="#">Item 5</a></div>
</div>
</div>
<div class="group">
<div class="group"><a href="#">Item 6</a></div>
<div class="group"><a href="#">Item 7</a></div>
<div class="group"><a href="#">Item 8</a></div>
<div class="group">
<div class="group"><a href="#">Item 9</a></div>
<div class="group"><a href="#">Item 10</a></div>
</div>
</div>
<div class="group">
<div class="group"><a href="#">Item 11</a></div>
<div class="group"><a href="#">Item 12</a></div>
<div class="group"><a href="#">Item 13</a></div>
<div class="group">
<div class="group"><a href="#">Item 14</a></div>
<div class="group"><a href="#">Item 15</a></div>
</div>
</div>
<div class="group">
<div class="group"><a href="#">Item 16</a></div>
<div class="group"><a href="#">Item 17</a></div>
<div class="group"><a href="#">Item 18</a></div>
<div class="group">
<div class="group"><a href="#">Item 19</a></div>
<div class="group"><a href="#">Item 20</a></div>
<div class="group"><a href="#">Item 21</a></div>
</div>
</div>
</div>
d) 对于16个项目,应如下所示:
<div class="group">
<div class="group"><a href="#">Item 1</a></div>
<div class="group"><a href="#">Item 2</a></div>
<div class="group"><a href="#">Item 3</a></div>
<div class="group">
<div class="group"><a href="#">Item 4</a></div>
<div class="group"><a href="#">Item 5</a></div>
</div>
</div>
<div class="group">
<div class="group"><a href="#">Item 1</a></div>
<div class="group"><a href="#">Item 2</a></div>
<div class="group">
<div class="group"><a href="#">Item 3</a></div>
<div class="group"><a href="#">Item 4</a></div>
</div>
<div class="group">
<div class="group"><a href="#">Item 5</a></div>
<div class="group"><a href="#">Item 6</a></div>
</div>
</div>
<div class="group">
<div class="group">
<div class="group"><a href="#">Item 1</a></div>
<div class="group"><a href="#">Item 2</a></div>
<div class="group"><a href="#">Item 3</a></div>
<div class="group"><a href="#">Item 4</a></div>
</div>
<div class="group">
<div class="group"><a href="#">Item 5</a></div>
<div class="group"><a href="#">Item 6</a></div>
<div class="group"><a href="#">Item 7</a></div>
<div class="group"><a href="#">Item 8</a></div>
</div>
<div class="group">
<div class="group"><a href="#">Item 9</a></div>
<div class="group"><a href="#">Item 10</a></div>
<div class="group"><a href="#">Item 11</a></div>
<div class="group"><a href="#">Item 12</a></div>
</div>
<div class="group">
<div class="group"><a href="#">Item 13</a></div>
<div class="group"><a href="#">Item 14</a></div>
<div class="group"><a href="#">Item 15</a></div>
<div class="group"><a href="#">Item 16</a></div>
</div>
</div>
<div class="group">
<div class="group">
<div class="group"><a href="#">Item 1</a></div>
<div class="group"><a href="#">Item 2</a></div>
<div class="group"><a href="#">Item 3</a></div>
<div class="group">
<div class="group"><a href="#">Item 4</a></div>
<div class="group"><a href="#">Item 5</a></div>
</div>
</div>
<div class="group">
<div class="group"><a href="#">Item 6</a></div>
<div class="group"><a href="#">Item 7</a></div>
<div class="group"><a href="#">Item 8</a></div>
<div class="group">
<div class="group"><a href="#">Item 9</a></div>
<div class="group"><a href="#">Item 10</a></div>
</div>
</div>
<div class="group">
<div class="group"><a href="#">Item 11</a></div>
<div class="group"><a href="#">Item 12</a></div>
<div class="group"><a href="#">Item 13</a></div>
<div class="group">
<div class="group"><a href="#">Item 14</a></div>
<div class="group"><a href="#">Item 15</a></div>
</div>
</div>
<div class="group">
<div class="group"><a href="#">Item 16</a></div>
<div class="group"><a href="#">Item 17</a></div>
<div class="group"><a href="#">Item 18</a></div>
<div class="group">
<div class="group"><a href="#">Item 19</a></div>
<div class="group"><a href="#">Item 20</a></div>
<div class="group"><a href="#">Item 21</a></div>
</div>
</div>
</div>
e) 对于21个项目,应如下所示:
<div class="group">
<div class="group"><a href="#">Item 1</a></div>
<div class="group"><a href="#">Item 2</a></div>
<div class="group"><a href="#">Item 3</a></div>
<div class="group">
<div class="group"><a href="#">Item 4</a></div>
<div class="group"><a href="#">Item 5</a></div>
</div>
</div>
<div class="group">
<div class="group"><a href="#">Item 1</a></div>
<div class="group"><a href="#">Item 2</a></div>
<div class="group">
<div class="group"><a href="#">Item 3</a></div>
<div class="group"><a href="#">Item 4</a></div>
</div>
<div class="group">
<div class="group"><a href="#">Item 5</a></div>
<div class="group"><a href="#">Item 6</a></div>
</div>
</div>
<div class="group">
<div class="group">
<div class="group"><a href="#">Item 1</a></div>
<div class="group"><a href="#">Item 2</a></div>
<div class="group"><a href="#">Item 3</a></div>
<div class="group"><a href="#">Item 4</a></div>
</div>
<div class="group">
<div class="group"><a href="#">Item 5</a></div>
<div class="group"><a href="#">Item 6</a></div>
<div class="group"><a href="#">Item 7</a></div>
<div class="group"><a href="#">Item 8</a></div>
</div>
<div class="group">
<div class="group"><a href="#">Item 9</a></div>
<div class="group"><a href="#">Item 10</a></div>
<div class="group"><a href="#">Item 11</a></div>
<div class="group"><a href="#">Item 12</a></div>
</div>
<div class="group">
<div class="group"><a href="#">Item 13</a></div>
<div class="group"><a href="#">Item 14</a></div>
<div class="group"><a href="#">Item 15</a></div>
<div class="group"><a href="#">Item 16</a></div>
</div>
</div>
<div class="group">
<div class="group">
<div class="group"><a href="#">Item 1</a></div>
<div class="group"><a href="#">Item 2</a></div>
<div class="group"><a href="#">Item 3</a></div>
<div class="group">
<div class="group"><a href="#">Item 4</a></div>
<div class="group"><a href="#">Item 5</a></div>
</div>
</div>
<div class="group">
<div class="group"><a href="#">Item 6</a></div>
<div class="group"><a href="#">Item 7</a></div>
<div class="group"><a href="#">Item 8</a></div>
<div class="group">
<div class="group"><a href="#">Item 9</a></div>
<div class="group"><a href="#">Item 10</a></div>
</div>
</div>
<div class="group">
<div class="group"><a href="#">Item 11</a></div>
<div class="group"><a href="#">Item 12</a></div>
<div class="group"><a href="#">Item 13</a></div>
<div class="group">
<div class="group"><a href="#">Item 14</a></div>
<div class="group"><a href="#">Item 15</a></div>
</div>
</div>
<div class="group">
<div class="group"><a href="#">Item 16</a></div>
<div class="group"><a href="#">Item 17</a></div>
<div class="group"><a href="#">Item 18</a></div>
<div class="group">
<div class="group"><a href="#">Item 19</a></div>
<div class="group"><a href="#">Item 20</a></div>
<div class="group"><a href="#">Item 21</a></div>
</div>
</div>
</div>
上面显示的示例是为全背景屏幕设计的,分为4个主要相等区域,这4个区域内最多可包含4个区域,每个区域还可包含后续4个区域等
如果模块4的项目总数为0,则网站上的项目总数将为相同的宽度和高度区域,但除此之外,还有一些区域更大,一些区域分隔为更多的子区域,并且出于此目的,上述HTML代码工作正常(在静态页面上,测试结果良好)
因此,我有一个大问题,就是如何将简单的数组数据转换成某种结构,以便通过任何递归函数或其他方法来处理,从而得到所需的结果
但正如我所写的,我并没有成功,主要是因为每个新的子容器应该从结构的最后一个开始创建,并统一用于4个主要象限中的每个象限
如果您愿意帮助我,我将在这里帮助您回答问题:)
我知道要把它描述得足够清楚有点复杂…这比我想象的要复杂一些,因为你想要分发物品的方式。但这应该能奏效 函数
arrangeGroups()
将创建一个如您所述的嵌套数组。创建将此数据呈现为嵌套div的函数应该没有问题
我添加了一些设置代码来动态生成您想要的任意多个数组条目。使测试更容易
define('GROUP_SIZE', 4);
$things = array();
for($idx=1; $idx<=21; $idx++)
$things[] = array( 'id'=>$idx, 'name'=>"Some name $idx" );
$groups = arrangeGroups($things);
print_r($groups);
function arrangeGroups($items) {
$tempGroups = array();
$itemCount = count($items); // we use this a lot.
// The hardest part here is figuring out how many items go into each group.
// Build an array of how big each subgroup should be.
// Put all the remainder items at the end of the array.
// Six items divided into four groups will yield the array
// (1, 1, 2, 2)
$groupings = array_fill(0, GROUP_SIZE, intval($itemCount/GROUP_SIZE));
$remainder = $itemCount % GROUP_SIZE ;
for ($idx=$remainder; $idx>0; $idx--)
$groupings[GROUP_SIZE-$idx]++;
// now we just create slices of the array we were given, using $groupings as our guide
$offset = $idx = 0;
do {
$sliceSize = $groupings[$idx];
if ( $sliceSize == 1 )
$tempGroups[] = $items[$offset];
else if ( $sliceSize > 1 )
$tempGroups[] = arrangeGroups( array_slice($items, $offset, $sliceSize) );
$offset += $sliceSize;
$idx++;
} while ($idx < GROUP_SIZE);
return $tempGroups;
}
定义('GROUP_SIZE',4);
$things=array();
对于($idx=1;$idx$idx,'name'=>“Some name$idx”);
$groups=安排组($things);
打印(组);
函数排列组($items){
$tempGroups=array();
$itemCount=count($items);//我们经常使用它。
//这里最难的部分是计算出每组有多少项。
//构建一个数组,列出每个子组的大小。
//将所有剩余项放在数组的末尾。
//分为四组的六个项目将生成数组
// (1, 1, 2, 2)
$groupings=数组填充(0,组大小,intval($itemCount/GROUP大小));
$rements=$itemCount%组大小;
对于($idx=$rements;$idx>0;$idx--)
$groupings[GROUP_SIZE-$idx]++;
//现在我们只需创建给定数组的切片,使用$groupings作为指南
$offset=$idx=0;
做{
$sliceSize=$groupings[$idx];
如果($sliceSize==1)
$tempGroups[]=$items[$offset];
否则,如果($sliceSize>1)
$tempGroups[]=arrangeGroups(array_slice($items,$offset,$sliceSize));
$offset+=$sliceSize;
$idx++;
}而($idx<组大小);
返回$temp组;
}
非常感谢您的时间和帮助。我已经测试了你的代码,它似乎工作briliant:)Thx很多。。。