选择多维数组

时间:2015-05-05 17:43:36

标签: php multidimensional-array

我有一个动态创建报告的项目。列数可能会改变,所以我想出了一个表来帮助我确定要使用的纸张尺寸。字体大小和页面大小下降。相交数字是列数。我想选择最大字体和最小纸张尺寸的组合。有没有一种简单的方法来确定这种组合?任何帮助总是受到赞赏。

修改
这是表格的副本。

enter image description here

我一直绞尽脑汁试图想出一个解决方案,但我甚至不知道从哪里开始。创建报告时,确切的列数可能与表中列出的列不同,但我想选择表中列出的下一个更大的数字。

2 个答案:

答案 0 :(得分:1)

这是多解决方案的多变量问题。可以清楚地看到,对于某些数量的列(例如,13,16)没有唯一的解决方案。

因此,它取决于您更重视哪个 - 更大的字体大小或更小的纸张尺寸。

即。目前还不清楚你的目标变量是什么。

您可以根据以下内容为组合创建某种索引得分

  1. 可读性(在这种情况下基于字体大小)
  2. 纸张保存
  3. 所以,作为一个例子

    1. 字体大小为8pt,可读性为0(最小),而字体大小为11pt,可读性分数为100(最大)
    2. 纸张尺寸为8.5x11,纸张节省分数为100(最小),而纸张尺寸为17x11则得分为0(最大)
    3. 然后,您可以通过某种方式组合这些分数以产生结果。

      如何将这些分数合并到最重要的分数。让 p 保存纸张, r 是可读性,您可以:

      y = 5p + 2x
      

      这样可以节省纸张,而不是2/5的可读性,或者你可以:

      y = e^p + e^x
      

      因此它们的权重相同,但是呈指数级,这意味着大纸上的大字体比中等纸张上的中等字体要好。

      一旦确定了可以满足最低需求的最低得分的组合,那么您可以选择正确的组合。

答案 1 :(得分:0)

我提出了以下解决方案,但我想知道是否有更有效的方法来做同样的事情。

enter image description here

我颠倒了上面显示的字体顺序,并使用了以下代码。

// Example number of columns  
$NumColumns = 15;
//

$PageFont[0][0] = 7;
$PageFont[0][1] = 8;
$PageFont[0][2] = 8;
$PageFont[0][3] = 9;
$PageFont[1][0] = 10;
$PageFont[1][1] = 11;
$PageFont[1][2] = 12;
$PageFont[1][3] = 13;
$PageFont[2][0] = 13;
$PageFont[2][1] = 14;
$PageFont[2][2] = 15;
$PageFont[2][3] = 16;
$PageFont[3][0] = 16;
$PageFont[3][1] = 17;
$PageFont[3][2] = 19;
$PageFont[3][3] = 20;

$Font = NULL;
$Page = NULL;

// $x = Page Size
// $y = Font Size

for($x=0;$x<4;++$x) {
    for($y=0;$y<4;++$y) {
        if($PageFont[$x][$y] >= $NumColumns) {
            $Page = $x;
            $Font = $y;
            break;
        }
    }
}