2009-07-18 7 views
1

と遊ぶ: - それぞれの下に30のサブカテゴリは、私は他の複数のアレイすなわちで構成された単一の配列を持っている現時点ではPHPの配列

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

これは、約60のカテゴリーと約10のために続けています。

カテゴリ&のサブカテゴリをPHP/HTMLページに列形式で表示したいとします。 これまでのところ、カテゴリの総量を必要な列で除算し、おそらくarray_sliceまたはarray_spliceを使用して各列のカテゴリを表示する必要があると私は理解しています。

だから、列ごとのカテゴリの量の計算式は次のようなものになるだろう:私はCSSはすなわち列を区切るためにフォーマットすると<div>タグを使用して意味の列を使用することにより

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

----------------------------------------------------------------------------- 
|   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で行うことができますか?
+4

あなたはおそらくあなたの質問を言い換えることができますか?私はあなたがしようとしていることを理解していません。 –

+0

カテゴリのリストを列形式で表示します。 各カテゴリの下にサブカテゴリが表示されます。 主な問題は、カテゴリを列に均等に分割する方法です。 – privateace

+0

列形式です。表で意味しますか? – random

答えて

4

私は完全にあなたが求めているものを理解していませんが、私は野生の刺しを取ると、次のようなもので行くつもりです:

EDIT:列の重みでので、列は比較的同じ長さで出てくるでしょう:

$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"; 
} 
+0

私が探していたものではありませんが、あまり正確ではありません。あなたが問題について同様の答えを持っていれば(私は少し上手く説明しました)、それはすばらしいでしょう。ありがとうございました – privateace

+0

列の長さが等しくないかどうか気にしない場合は、それほど問題はありません。すぐに何か作業をします。 –

+0

これは絶対に完璧です。しかし、簡単な質問ですが、もし私があなたに少しでもお困りのような場合は、どのように列をアルファベット順に並べ替えるのでしょうか?たとえば、カテゴリをアルファベット順にソートし、並べ替えられたリストを列全体に垂直に配布しますか? – privateace

関連する問題