繁体   English   中英

PHP Array_merge 不添加逗号

[英]PHP Array_merge not adding comma

我正在使用 plotly.js 构建指标图,并且正在构建分组条形图。 我的图表是什么样的

不同组中的每个条形代表不同年份的数据。 并非所有组都有每年的数据,因此我需要为每个组设置不同的结构。 对于这个特定问题,我需要一组数据看起来像这样

[633, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0]

我有两个单独的 sql 查询拉 633 和 113。然后我通过这样做创建两个不同的数组

$array1 = array($value1, array_fill(1, 2, 0)); 
$array2 = array($value2, array_fill(4, 9, 0));

然后我将两个数组合并在一起以创建一个可以将我的数据发送到图形的数组。

$finalArray = array_merge($array1, $array2);

产生的结果:

在此处输入图片说明

就数据和顺序而言,它看起来是正确的。 但是,我不确定为什么我的数据库中的值没有与该值对应的键,更大的问题是数组合并的位置缺少逗号,因此值 113 显示在错误的组中我的图表中的条形图。

由于 plotly 是一个 javascript 库,因此我发布了将数据发送到 javascript 文件时得到的结果。 我通过从 PHP 函数返回数组变量,然后在我的 javascript 文件中调用该变量,将 PHP 数据发送到 javascript。

var finalArray = <? echo json_encode($courseData, JSON_PRETTY_PRINT) ?>;

所以我希望我能深入了解为什么缺少逗号和/或我做错了什么。

这将构建一个数组,其中第一个元素是单个值,第二个元素是另一个数组:

array($value1, array_fill(1, 2, 0))

即,你得到这个:

[633, [0, 0]]

如果你想要这个输出:

[633, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0]

然后你需要用一堆单个值构建数组。 您可以通过将多个数组发送到 array_merge() 来实现这一点,它会提取值,然后将它们全部堆叠在一个数组中:

$new = array_merge(
    [$value1],
    array_fill(1, 2, 0)
    [$value2],
    array_fill(4, 9, 0)
);

我不确定“缺少逗号”是什么意思。

您正在使用array($value1, array_fill(1, 2, 0));创建一个多维数组array($value1, array_fill(1, 2, 0)); 当你想要一个的时候。 您正在使用具有您的数字的第一个值创建一个数组,第二个值是一个数组:

(
  [0] => 633
  [1] => Array
  (
    [1] => 0
    [2] => 0
   )
)

数组合并然后将这两个多维数组放在一起,得到您当前得到的结果。

你会想要这样的东西:

$finalArray = array_merge(
  [$value1],
  array_fill(1, 2, 0)
  [$value2],
  array_fill(4, 9, 0)
);

另外,那个 4 应该是 3 吗?

如果您使用的是 PHP 7.4,还可以在创建前两个数组时解压缩array_fill结果。

$array1 = array($value1, ...array_fill(1, 2, 0)); 
$array2 = array($value2, ...array_fill(4, 9, 0));

然后array_merge将按原样工作。

或者(除非您需要$array1$array2用于其他用途)您可以在没有array_merge情况下以相同的方式构建最终数组。

$finalArray = [$value1, ...array_fill(1, 2, 0), $value2, ...array_fill(4, 9, 0)];

如果您使用的不是 PHP 7.4 ... 没关系。 :-)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM