使用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              |
 -----------------------------------------------------------------------------
问题:

  • 这是正确的做法吗
  • 如何在PHP中实现这一点

  • 虽然我不完全明白你在问什么,但我还是要大胆尝试一下,并提出如下建议:

    编辑:使用列权重,因此列的长度将相对相同:

    $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放在第二列。肯定不是我想要的,但同样准确。如果你对这个问题有一个类似的答案(我解释得更好一点),那就太好了。谢谢如果你不关心列的长度是否相等,那么这是一个很小的问题,我会很快解决的。那绝对是完美的。不过,我想问一个简单的问题,如果我能