PHP Array_merge без добавления запятой - PullRequest
1 голос
/ 25 января 2020

Я строю графики метрик, используя график. js, и я строю сгруппированную гистограмму. What my graph looks like

Каждый столбец в разных группах представляет данные за разные годы. Не во всех группах есть данные за каждый год, поэтому мне нужно иметь различную структуру для каждой группы. Для этого конкретного вопроса мне нужен массив моих данных, чтобы он выглядел следующим образом

[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);

, который дает результат:

enter image description here

, который смотрит прямо на данные и порядок. Однако я не уверен, почему мои значения из базы данных не имеют ключа к go со значением, и большая проблема заключается в том, что когда массивы объединяются, запятая отсутствует, поэтому значение 113 отображается неправильно группа баров в моем графике.

Как и на графике, находится библиотека javascript. Я публикую результаты, полученные при отправке данных в файл javascript. Я отправляю данные PHP в javascript, возвращая переменную массива из функции PHP, а затем вызываю эту переменную в моем файле javascript.

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

Так что я надеюсь, что смогу понять, почему запятая отсутствует и / или что я делаю неправильно.

Ответы [ 3 ]

1 голос
/ 25 января 2020

Это создает массив, в котором первый элемент представляет собой одно значение, а второй элемент представляет собой другой массив:

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)
);

Я не уверен, что означает «запятая отсутствует» .

0 голосов
/ 25 января 2020

Если вы используете 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 ... неважно. : -)

0 голосов
/ 25 января 2020

Вы создаете многомерный массив с 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...