2014-07-19 40 views
1

OK。我正在PHP项目中工作。根据N个类别划分的数据与X个总数据限制数

,我有我的数据库中的一些分类的数据 -

对于示例 - 我有三类数据。

类别1个
类别2
类别3个

类别可以改变。像2,3,4,5等

而且我有设施来显示数据的限制。

Ex。可以说,管理员只想显示9条记录

所以现在我们有三个类别和x限制(根据示例,这是9)。最好的事情是 -

我需要显示N个记录从每个类别和总X记录。

这里N个数字是针对每个类别的。因此,它看起来就像这样:

N1 + N2 + N3 = X(限前9)

N1从组别
N2从产品组别
N3从类别3

所以基本上我已经这样制定它 -

NumberOfRecordPerCategory = X(限制)/ N(个数)

但它实际上是工作,如果我设置的3限制多像6,9,12等

所以我的问题是 -

如何管理根据总记录限制(X) -
1.如果管理员设置的限制不是3倍,如8,10,11等
2.如果管理员更改类别的数目喜欢2或4,那么我怎么能管理这个?

请对此有所了解。如果问题不清楚,请让我知道。

谢谢

回答

0

我会选择你的要求是ceil(圆的分数)。如果因为数字不是3的倍数而存在一些分数,例如11个分类为3个,那么对于每个类别具有4,4,3的限制。这可以通过有两个限制值来完成:总数限制,每个类别限制。(代码):

<?php 

/* 

$data = array (
"category1" => array (1,2,3,4,5), 
"category2" => array (10,20,30,40,50), 
"category3" => array (100,200,300,400,500), 
); 
*/ 

$limit = 11; // given by the admin 
$number_of_categories = count($data); 
$limit_per_category = ceil ($limit/$number_of_categories); // ceil (11/3) = 4 

$cnt = 0; // tracking the total number of retrieved data. 
foreach ($data as $row) { 
    $cnt_category = 0; 
    foreach ($row as $item) { 
    echo $item . "\n"; // print the first N (NumberOfRecordPerCategory) data 
    $cnt_category++; 

    $cnt++; 
    if ($cnt >= $limit) break; // exit the loop 
    if ($cnt_category >= $limit_per_category) break; // move to next category 
    } 
    if ($cnt >= $limit) break; // exit the loop  
} 
+0

感谢您的意见。 –