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

How to make rows to column names in an associative array in PHP

我想在 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}]

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

'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;
?>

我认为这对您有帮助

你可以试试这个。希望有用

    $string='[{"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}]';

    $array=json_decode($string,true);
    $newArray=array();
    $keyArray=array();
    $indexArray=array();
    $index=0;
    foreach ($array as $position => $dataArray)
    {
        if(!in_array($array[$position]['Datetime'], $keyArray))
        {
            $keyArray[]=$array[$position]['Datetime'];
            $indexArray[$array[$position]['Datetime']]=$index;
            $index++;
        }
    }
    foreach($array as $position => $dataArray)
    {
        foreach($dataArray as $key => $value)
        {
            if($key=='Datetime' && empty($newArray[$indexArray[$value]]['Datetime']))
            {
                $newArray[$indexArray[$value]]['Datetime']=$value;
            }
            else
            {
                $indexArray[$array[$position]['Datetime']];
                $newArray[$indexArray[$array[$position]['Datetime']]][$dataArray['Make']]=$dataArray['Sales'];
                break;
            }
        }
    }
    print_r($newArray);

    $newArray1=array();
    $colIndex=0;
    foreach($newArray as $index => $dataArray)
    {
        foreach($dataArray as $key => $value)
        {
            if(count($newArray1['cols'])!=4)
            {
                $type=($key=='Datetime') ? 'date' : 'string';
                $newArray1['cols'][$colIndex]['label']=$key;
                $newArray1['cols'][$colIndex]['type']=$type;
                $colIndex++;
            }
            else
            {
                $colIndex=0;
            }
            if(preg_match('/^([\d]{4})-([\d]{2})-([\d]{2})$/',$value,$matches))
            {
                $value='Date('.$matches[1].', '.$matches[2].', '.$matches[3].')';
            }
            $newArray1['rows'][$index]['c'][]['v']=$value;;
        }
    }
    print_r($newArray1);

这将为您的问题提供准确的答案。