Игра с PHP массивами - PullRequest
1 голос
/ 18 июля 2009

На данный момент у меня есть один массив, состоящий из нескольких других массивов, например:

-- Category
    -- Subcategory
        -- Name
        -- Count
    -- Subcategory
        -- Name
        -- Count
    -- Subcategory
        -- Name
        -- Count
-- Category
    -- Subcategory
        -- Name
        -- Count
    -- Subcategory
        -- Name
        -- Count

Это продолжается примерно для 60 категорий и примерно 10-30 подкатегорий в каждой.

Я хочу отобразить категории и подкатегории на странице PHP / HTML в формате столбца. Насколько я понимаю, мне нужно разделить общее количество категорий на необходимые столбцы, а затем, возможно, использовать array_slice или array_splice для отображения категорий для каждого столбца.

Таким образом, формула для количества категорий в столбце будет выглядеть примерно так:

$categoriesPerColumn = ceil($TotalNumberOfCategories / $numberOfColumns);

Используя столбцы, я имею в виду использование тегов <div> с форматированием 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              |
 -----------------------------------------------------------------------------

Вопросы:

  1. Это правильный способ сделать это?
  2. Как это можно сделать в PHP?

1 Ответ

4 голосов
/ 18 июля 2009

Хотя я не совсем понимаю, о чем вы спрашиваете, я собираюсь сделать дикий удар и пойти примерно так:

РЕДАКТИРОВАТЬ: С весами столбцов, поэтому столбцы будут иметь относительно одинаковую длину:

$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";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...