Преобразование массива PHP в JS

277
13 сентября 2017, 13:10

Всем доброго времени суток. Подскажите пожалуйста столкнулся с такой задачей, есть плагин графиков на js в нем есть такие массивы с данными:

var l = [
        ['01-01-2008', 1],
        ['02-01-2008',0.93],
        ['03-01-2008',0.94],
        ['04-01-2008',0.97],
        ['05-01-2008',1.19],
        ['06-01-2008',0.98],
        ['07-01-2008',0.99],
        ['08-01-2008',0.99],
        ['09-01-2008',1.03],
        ['10-01-2008',1.01],
        ['11-01-2008',1.01],
        ['12-01-2008',1.01],
        ['01-01-2009',1.02],
        ['02-01-2009',1,03],
        ['03-01-2009',1.08],
        ['04-01-2009',1.04],
        ['05-01-2009',1.03],
        ['06-01-2009',1.06]
    ];

Есть необходимость выводить эти данные и базы данных. Формирую такой же массив в контроллере PHP использую фреймворк Laravel

При передачи массива во вьюху выдает ошибку: При преобразовании в строку с помощью json_encode я получаю результат с фигурными скобками: мне же нужен в точности такой массив как представлен выше. Так же пробовал передать json_encode($l) из контроллера во вьюху, а там сделать JSON.parse() Аналогично фигурные скобки. Подскажите пожалуйста какое может быть тут решение чтоб вывелись данные в квадратных скобках как представлено в коде var l = ...

Answer 1

Не мешайте в одну кучу массивы и объекты, и будет счастье:

$a = [['01-01-2008', 1], ['02-01-2008',0.93]];
echo 'var l = ' . json_encode($a) . ';';
// var l = [["01-01-2008",1],["02-01-2008",0.93]];
Answer 2

Похоже, что при создании массива вы (возможно не подозревая об этом) приводите типы массив -> объект -> массив. Это позволяет создать ситуацию, когда ключи вашего массива - строки, хотя и содержат только десятичные цифры. Такие массивы сериализуются в JSON как объекты. Попробуйте обойтись без приведения типов. Если это невозможно, обойдите ваш массив перед сериализацией и создайте его нормальную копию.

В крайнем случае можно сделать что-то вроде:

<?php
$obj = (object) [];
$obj->{'0'} = '01-01-2008';
$obj->{'1'} = 0.93;
$badArr = [
    (array) $obj,
];
$goodArr = array_map(function($subArr) {
    return array_values($subArr);
}, $badArr);
var_dump($badArr, $goodArr);

Тут рассказывают про создание ассоциативных массивов с ключами числами: https://stackoverflow.com/questions/4100488/a-numeric-string-as-array-key-in-php

READ ALSO
Jquerry, отловить количество символов

Jquerry, отловить количество символов

Коллеги, как вывести сообщение alert как только наберётся 3 символа ? Я так понимаю keyup функцияСпасибо

192
Как получить значение атрибута js?

Как получить значение атрибута js?

Пытаюсь подключить ползунокЗначение, которое нужно получить находится в атрибуте aria-valuetext

491
Какой смысл использовать &ldquo;@charset&rdquo; в CSS?

Какой смысл использовать “@charset” в CSS?

Неоднократно замечал, что в начале CSS файлика задается кодировка в частности UTF-8

200
Как удалить крайние блоки, которые не вмещаются в контейнер?

Как удалить крайние блоки, которые не вмещаются в контейнер?

Есть девять блоков выстроенных в ряд (display: inline-block)

339