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) ?>;
所以我希望我能深入了解为什么缺少逗号 and/or 我做错了什么。
这将构建一个数组,其中第一个元素是单个值,第二个元素是另一个数组:
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)
);
我不确定 "comma is missing" 是什么意思。
当您想要一个时,您正在使用 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...没关系。 :-)
我正在使用 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) ?>;
所以我希望我能深入了解为什么缺少逗号 and/or 我做错了什么。
这将构建一个数组,其中第一个元素是单个值,第二个元素是另一个数组:
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)
);
我不确定 "comma is missing" 是什么意思。
当您想要一个时,您正在使用 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...没关系。 :-)