php - 如何在 PHP 的关联数组中将行创建为列名

标签 php mysql arrays json associative-array

我想在 PHP 中将行转换为关联数组中的列名。我的数据以关联数组格式存储在单个变量 $salesone 中。

下面是存储在变量$salesone中的数据。

[{"Datetime":"2011-01-31", "Make":"Datsun", "Sales":0},
 {"Datetime":"2011-02-28", "Make":"Datsun", "Sales":0},
 {"Datetime":"2011-03-31", "Make":"Datsun", "Sales":0},
 {"Datetime":"2011-01-31", "Make":"Fiat", "Sales":2150},
 {"Datetime":"2011-02-28", "Make":"Fiat", "Sales":1839},
 {"Datetime":"2011-03-31", "Make":"Fiat", "Sales":1860},
 {"Datetime":"2011-01-31", "Make":"Ford", "Sales":10026},
 {"Datetime":"2011-02-28", "Make":"Ford", "Sales":9293},
 {"Datetime":"2011-03-31", "Make":"Ford", "Sales":10485}]

但谷歌折线图无法将其解释为绘制折线图。它给我以下错误:

'all the data on given axis must be of same data type'


我想要以下格式的数据:

[{"Datetime":"2011-01-31", "Datsun":0, "Fiat":2150, "Ford":10026},
{"Datetime":"2011-02-28", "Datsun":0, "Fiat":1839, "Ford":9293},
{"Datetime":"2011-01-31", "Datsun":0, "Fiat":1860, "Ford":10845}]

如何在 PHP 中以编程方式转换此数据? (它作为关联数组存储在 $salesone 变量中)。

最佳答案

请使用以下代码输出:

<?php
$number = '[{"Datetime":"2011-01-31","Make":"Datsun","Sales":0},
{"Datetime":"2011-02-28","Make":"Datsun","Sales":0},
{"Datetime":"2011-03-31","Make":"Datsun","Sales":0},
{"Datetime":"2011-01-31","Make":"Fiat","Sales":2150},
{"Datetime":"2011-02-28","Make":"Fiat","Sales":1839},
{"Datetime":"2011-03-31","Make":"Fiat","Sales":1860},
{"Datetime":"2011-01-31","Make":"Ford","Sales":10026},
{"Datetime":"2011-02-28","Make":"Ford","Sales":9293},
{"Datetime":"2011-03-31","Make":"Ford","Sales":10485}]';

$number = json_decode($number);
$output = array();
foreach($number as $value){
    $output[$value->Datetime]['Datetime'] = $value->Datetime;
    $output[$value->Datetime][$value->Make] = $value->Sales;
}
$output = array_values($output);
$output = json_encode($output);
echo $output;

请使用下面的代码进行下一次评论:

<?php
$number = '[{"Datetime":"2011-01-31","Make":"Datsun","Sales":0},
{"Datetime":"2011-02-28","Make":"Datsun","Sales":0},
{"Datetime":"2011-03-31","Make":"Datsun","Sales":0},
{"Datetime":"2011-01-31","Make":"Fiat","Sales":2150},
{"Datetime":"2011-02-28","Make":"Fiat","Sales":1839},
{"Datetime":"2011-03-31","Make":"Fiat","Sales":1860},
{"Datetime":"2011-01-31","Make":"Ford","Sales":10026},
{"Datetime":"2011-02-28","Make":"Ford","Sales":9293},
{"Datetime":"2011-03-31","Make":"Ford","Sales":10485}]';

$number = json_decode($number);
$output = array();
foreach($number as $value){
    $output[$value->Datetime]['Datetime'] = $value->Datetime;
    $output[$value->Datetime][$value->Make] = $value->Sales;
}
$output = array_values($output);

$newOutput = array();
$counter = 0;
$colCounter = 0;
$colArray  = array();
foreach($output as $key=>$value){
    foreach($value as $innerKey => $innerValue){
        if(!array_key_exists($innerKey,$colArray)){
            $colArray[$innerKey] = $innerKey;
            $newOutput['cols'][$colCounter]['label'] = $innerKey;
            $newOutput['cols'][$colCounter]['type'] = ($innerKey == "Datetime")?"date":"string";

            $colCounter++;
        }
        $newOutput['rows'][$counter]['c'][]['v'] = ($innerKey == "Datetime")?"date(".date('Y,n,j',$innerValue).")":$innerValue;
    }
    $counter++;
}
$newOutput = json_encode($newOutput);
echo $newOutput;
?>

我认为这对你有帮助

关于php - 如何在 PHP 的关联数组中将行创建为列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35307674/

相关文章:

java - 使用 Jackson 将 JSON 数组反序列化为单个 Java 对象

java - 查找数组中小于 M 下一个元素的元素

php - 如何在MT940中查找双重交易

php - 如果钱包中没有私钥,如何检查 0 确认比特币交易?

php - 如何将一个 mySQL 表的值连接到另一个表的值?

php - 获取数据时出错 - 从数据库 php 检索数据

php - 如何通过 php 检测和修复 mysql 数据库中的字符编码?

PHP/MySQL 按比例更新字段

php - 'type' 中的未知列 'where clause'

c - Main 无法正确调用函数 "makeArray"