0

我设置了一组值,例如:

$array[0]['Year', 'Value']

主数组内部有 100 个左右的数组,每个数组都有 30 个值对,即“Year”和“Value”。这对我当前的所有应用程序都非常有用,直到我遇到各种希望其数据格式如下的图形库:

[x1, y1, y2, y3 ...], [x2, y1, y2, y3 ...], ...

如果我的所有数据点都从同一年开始,这将很容易,但事实并非如此。我的数组都从不同的年份开始,并且重叠。这样做的问题是,如果该 X 点没有 Y 轴值,则图形库格式需要一个“空”值作为该特定系列的地标。

示例:我的 $array[0] 来自 1900-1930,我的 $array[1] 来自 1901-1931。因此,新数组需要为 [1900, $array[0]['Value']], null] (表示 $array[1] 没有值,但仍然是然后是 [1901, $array[0]['Value'], $array[1]['Value']] 等等。

我一直在绘制图表并试图围绕创建一系列循环来获取我的旧数组并对其进行转换......但我不知所措。有任何想法吗?

4

1 回答 1

0

首先你需要定义你的 y 点,为此我们需要一个范围。当您创建数组时,我将有两个变量,$minYear然后$maxYear,对于数组中的每个条目,您检查它是否小于 minYear 或大于 maxYear,如果是,则将值替换为这个值。

这给了我们最小值和最大值,现在我们需要一个范围。您需要确定每年之间有多少分。为了简单起见,我假设 1 年是 y 轴上的一个增量。但是,如果您在 y 轴上可以使用的最大点数,那么您可以使用以下公式计算每个点之间的年数:

$increment = ($maxYear - $minYear) / $numPointsOnYAxis;

这将为您提供 Y 轴上每个点之间的年数。为简单起见,您可能希望使用该ceil()函数对该数字进行四舍五入。这意味着您不会使用 Y 轴上的每个点,但它可以使数学变得简单易行。

现在我们有了我们的范围,您可以使用 foreach 循环来遍历您的数据并绘制图表。

$space = '';
foreach($array as $num => $a) {
    echo $space . '[x' . $num;
    foreach($a as $year => $value) {
        $y = ceil(($value - $minValue) / $increment); //Work out how many increments up the scale the year needs to be.
        echo ', y' . $y;
    }
    echo ']';
    $space = ', ';
}

这应该呼应你所追求的。请不要说我没有测试过这段代码。

于 2013-07-23T15:21:58.270 回答