使用PHP数组
目前,我有一个由多个其他阵列组成的单个阵列,即:使用PHP数组,php,css,arrays,html,Php,Css,Arrays,Html,目前,我有一个由多个其他阵列组成的单个阵列,即: -- Category -- Subcategory -- Name -- Count -- Subcategory -- Name -- Count -- Subcategory -- Name -- Count -- Category -- Subcategory -- Name --
-- Category
-- Subcategory
-- Name
-- Count
-- Subcategory
-- Name
-- Count
-- Subcategory
-- Name
-- Count
-- Category
-- Subcategory
-- Name
-- Count
-- Subcategory
-- Name
-- Count
这将继续为大约60个类别和大约10-30个子类别下的每一个
我想在PHP/HTML页面上以列格式显示类别和子类别。
到目前为止,我的理解是,我需要将类别总数除以所需的列,然后可能使用array\u slice
或array\u splice
来显示每列的类别
因此,每列类别数量的公式如下:
$categoriesPerColumn = ceil($TotalNumberOfCategories / $numberOfColumns);
通过使用列,我的意思是使用带有css格式的
标记来分隔列,即:
-----------------------------------------------------------------------------
| First Category | Third Category |
| - Subcategory 1 (Count) | - Subcategory 1 |
| - Subcategory 2 (Count) | - Subcategory 2 |
| - Subcategory 3 (Count) | Fourth Category |
| - Subcategory 4 (Count) | - Subcategory 1 |
| Second Category | Fifth Category |
| - Subcategory 1 (Count) | - Subcategory 1 |
| - Subcategory 2 (Count) | - Subcategory 2 |
| - Subcategory 3 (Count) | - Subcategory 3 |
| - Subcategory 4 (Count) | - Subcategory 4 |
| | - Subcategory 5 |
-----------------------------------------------------------------------------
问题:
虽然我不完全明白你在问什么,但我还是要大胆尝试一下,并提出如下建议: 编辑:使用列权重,因此列的长度将相对相同:
$categories = array(
"First Category" => array(
array("name" => "First subcategory", /* etc */),
array("name" => "Second subcategory", /* etc */),
array("name" => "Third subcategory", /* etc */),
),
"Second Category" => array(
array("name" => "First subcategory", /* etc */),
array("name" => "Second subcategory", /* etc */),
),
"Third Category" => array(
array("name" => "First subcategory", /* etc */),
array("name" => "Second subcategory", /* etc */),
),
);
// Setup the preprocessing.
$numColumns = 2;
$columnLength = array();
$columnData = array();
for ($i = 0; $i <= $numColumns; $i++)
{ $columnLength[] = 0; $columnData[] = ''; }
// Sort the category array
ksort($categories);
// Process our data
foreach ($categories as $cname => $subcats) {
$minLength = $columnLength[0];
$minIndex = 0;
for ($i = 1; $i < $numColumns; $i++) {
if ($columnLength[$i] < $minLength) {
$minLength = $columnLength[$i];
$minIndex = $i;
}
}
$columnLength[$minIndex] += 1 + count($subcat);
$columnData[$minIndex] .= '<center style="text-size:1.1em">'.$cname.'</center><br/>';
foreach($subcats as $subcat) {
$columnData[$minIndex] .= '- '.$subcat['name'].'<br/>';
}
}
// Display our data
for ($i = 0; $i < $numColumns; $i++) {
echo '<div class="column'.($i+1).'">'.$columnData[$i]."</div>\n";
}
$categories=数组(
“第一类”=>数组(
数组(“名称”=>“第一个子类别”、/*等*/),
数组(“名称”=>“第二个子类别”、/*等*/),
数组(“名称”=>“第三个子类别”、/*等*/),
),
“第二类”=>数组(
数组(“名称”=>“第一个子类别”、/*等*/),
数组(“名称”=>“第二个子类别”、/*等*/),
),
“第三类”=>数组(
数组(“名称”=>“第一个子类别”、/*等*/),
数组(“名称”=>“第二个子类别”、/*等*/),
),
);
//设置预处理。
$numColumns=2;
$columnLength=array();
$columnData=array();
对于($i=0;$i$subcats){
$minLength=$columnLength[0];
$minIndex=0;
对于($i=1;$i<$numColumns;$i++){
如果($columnLength[$i]<$minLength){
$minLength=$columnLength[$i];
$minIndex=$i;
}
}
$columnLength[$minIndex]+=1+计数($SUBACT);
$columnData[$minIndex]。=''.$cname'.
;
foreach($subcats作为$subcat){
$columnData[$minIndex]。='-'.$subcat['name'].
;
}
}
//显示我们的数据
对于($i=0;$i<$numColumns;$i++){
回显“”。$columnData[$i]。“\n”;
}
虽然我不完全理解你的要求,但我还是要大胆尝试一下,并采用以下方法:
编辑:使用列权重,因此列的长度将相对相同:
$categories = array(
"First Category" => array(
array("name" => "First subcategory", /* etc */),
array("name" => "Second subcategory", /* etc */),
array("name" => "Third subcategory", /* etc */),
),
"Second Category" => array(
array("name" => "First subcategory", /* etc */),
array("name" => "Second subcategory", /* etc */),
),
"Third Category" => array(
array("name" => "First subcategory", /* etc */),
array("name" => "Second subcategory", /* etc */),
),
);
// Setup the preprocessing.
$numColumns = 2;
$columnLength = array();
$columnData = array();
for ($i = 0; $i <= $numColumns; $i++)
{ $columnLength[] = 0; $columnData[] = ''; }
// Sort the category array
ksort($categories);
// Process our data
foreach ($categories as $cname => $subcats) {
$minLength = $columnLength[0];
$minIndex = 0;
for ($i = 1; $i < $numColumns; $i++) {
if ($columnLength[$i] < $minLength) {
$minLength = $columnLength[$i];
$minIndex = $i;
}
}
$columnLength[$minIndex] += 1 + count($subcat);
$columnData[$minIndex] .= '<center style="text-size:1.1em">'.$cname.'</center><br/>';
foreach($subcats as $subcat) {
$columnData[$minIndex] .= '- '.$subcat['name'].'<br/>';
}
}
// Display our data
for ($i = 0; $i < $numColumns; $i++) {
echo '<div class="column'.($i+1).'">'.$columnData[$i]."</div>\n";
}
$categories=数组(
“第一类”=>数组(
数组(“名称”=>“第一个子类别”、/*等*/),
数组(“名称”=>“第二个子类别”、/*等*/),
数组(“名称”=>“第三个子类别”、/*等*/),
),
“第二类”=>数组(
数组(“名称”=>“第一个子类别”、/*等*/),
数组(“名称”=>“第二个子类别”、/*等*/),
),
“第三类”=>数组(
数组(“名称”=>“第一个子类别”、/*等*/),
数组(“名称”=>“第二个子类别”、/*等*/),
),
);
//设置预处理。
$numColumns=2;
$columnLength=array();
$columnData=array();
对于($i=0;$i$subcats){
$minLength=$columnLength[0];
$minIndex=0;
对于($i=1;$i<$numColumns;$i++){
如果($columnLength[$i]<$minLength){
$minLength=$columnLength[$i];
$minIndex=$i;
}
}
$columnLength[$minIndex]+=1+计数($SUBACT);
$columnData[$minIndex]。=''.$cname'.
;
foreach($subcats作为$subcat){
$columnData[$minIndex]。='-'.$subcat['name'].
;
}
}
//显示我们的数据
对于($i=0;$i<$numColumns;$i++){
回显“”。$columnData[$i]。“\n”;
}
您能否重新表述您的问题?我不明白你想做什么。以列格式显示类别列表。在每个类别下列出子类别。主要的问题是如何将类别平均分割为columnsColumn格式,你是说在表中吗?更重要的是使用带有css格式的div标记。我对这个问题补充了一点细节。谢谢你的耐心。你能把你的问题改一下吗?我不明白你想做什么。以列格式显示类别列表。在每个类别下列出子类别。主要的问题是如何将类别平均分割为columnsColumn格式,你是说在表中吗?更重要的是使用带有css格式的div标记。我对这个问题补充了一点细节。谢谢你的耐心。肯定不是我要找的,但仍然准确。如果你对这个问题有一个类似的答案(我解释得更好一点),那就太好了。谢谢如果你不关心列的长度是否相等,那么这是一个很小的问题,我会很快解决的。那绝对是完美的。不过,我想问一个简单的问题,如果我能再麻烦你一点的话,我将如何按照字母顺序在各列中对类别进行排序?例如:按字母顺序对类别进行排序,然后将排序后的列表垂直分布在各个列上?如果你有一个像我这样的结构,那么就研究一下(我会编辑它,因为它是一行),问题是上面的方法(包括ksort方法)将按字母顺序排序的类别分布到列中。意思是A将在第1列,然后顺序中的下一个,比如B,被放入第2列,然后下一个返回到第一列。我一直在寻找的是非常相似的,但会填满每一列,例如:把A,B&C放在第一列,D,E&F放在第二列。肯定不是我想要的,但同样准确。如果你对这个问题有一个类似的答案(我解释得更好一点),那就太好了。谢谢如果你不关心列的长度是否相等,那么这是一个很小的问题,我会很快解决的。那绝对是完美的。不过,我想问一个简单的问题,如果我能