У меня возникает странная проблема при численном индексировании массива с помощью функции array_values, а не в кодировке JSON. Вот краткое объяснение, как работает мой скрипт. Во-первых, она извлекает данные с помощью запроса из базы данных и выводит следующее из:PHP: array_values + json_encode возвращает «странную» строку
Eg:
Array
(
[0] => Array
(
[label] => Direct
[value] => 1445
)
[1] => Array
(
[label] => Internal
[value] => 2
)
[2] => Array
(
[label] => Internal
[value] => 2
)
[3] => Array
(
[label] => Internal
[value] => 3
)
[4] => Array
(
[label] => Internal
[value] => 1
)
[5] => Array
(
[label] => Internal
[value] => 1
)
[6] => Array
(
[label] => External
[value] => 1
)
)
чем с помощью этой функции я удалить любой дубликат лейбла и суммировать значения.
$sources = array();
foreach($data as $key => $values)
{
if(array_key_exists($values['label'], $sources))
{
$sources[$values['label']]['value'] += $values['value'];
$sources[$values['label']]['label'] = $values['label'];
}
else
{
$sources[$values['label']] = $values;
}
}
Возвращение этого:
Array
(
[Direct] => Array
(
[label] => Direct
[value] => 1445
)
[Internal] => Array
(
[label] => Internal
[value] => 9
)
[External] => Array
(
[label] => External
[value] => 1
)
)
Примечание: Я не могу использовать SQL для подсчитывать общую стоимость как метки прямые, внутренние и внешние назначены после того, как данные вытягивается; поэтому, пожалуйста, не предлагайте это.
Чем я применяю array_values () возвращенный отфильтрованный массив, давая мне это:
Array
(
[0] => Array
(
[label] => Direct
[value] => 1445
)
[1] => Array
(
[label] => Internal
[value] => 9
)
[2] => Array
(
[label] => External
[value] => 1
)
)
До сих пор все хорошо. Однако, когда я поворачиваю массив в JSON с json_encode он возвращает следующую строку:
[{"label":"Direct","value":"1445"},{"label":"Internal","value":9},{"label":"External","value":"1"}]
На первый взгляд она выглядит прекрасно. Однако, если вы внимательно посмотрите, значение 9 не входит в кавычки, тогда как значения 1445 и 1. Мне нужно значение 9 также в кавычках.
То, что я заметил, это проблема, которая, скорее всего, лежит в функции, удаляет дубликаты и суммирует значения вверх, так как Internal является единственным с дубликатами в исходном массиве.
Полный код:
//Add up values of duplicate labels
$sources = array();
foreach($data as $key => $values)
{
if(array_key_exists($values['label'], $sources))
{
$sources[$values['label']]['value'] += $values['value'];
$sources[$values['label']]['label'] = $values['label'];
}
else
{
$sources[$values['label']] = $values;
}
}
//Assign numeric values as main key
$sources = array_values($sources);
//Print JSON
echo json_encode($sources);
Вы можете показать нам свой вызов 'json_encode()'? –
После funtion, который возвращает массив, назначенный источникам $, у меня есть следующее: $ sources = array_values ($ sources); echo json_encode ($ sources); –
, если вы используете var_dump вместо print_r, вы можете увидеть дополнительную информацию о типе данных –