首页 文章

PHP PDO将数组转换为不同的格式

提问于
浏览
4

我试图使用PHP pdo使用非弃用技术转换由下面的代码获得的数组:

$stm = $conn->prepare("SELECT * FROM mysqltable");
$stm->execute();
$results = $stm->fetchAll(PDO::FETCH_ASSOC);
print_r($results);

使用融合图所需的以下格式

[
{
label: "CJ Anderson",
value: "25"
},
{
label: "Imran Tahir",
value: "25"
},
...
...
]

原始数组如下:

Array (
    [0] => Array (
        [Id] => 6 
        [Number] => 1234567890 
        [Visits] => 1 
        [Name] => John 
    )
    [1] => Array (
        [Id] => 7 
        [Number] => 1236549871 
        [Visits] => 9 
        [Name] => Jerry 
    )
    [2] => Array (
        [Id] => 8 
        [Number] => 2147483647 
        [Visits] => 3 
        [Name] => Jane 
    )
)

任何帮助将不胜感激,谢谢 .

编辑:正如我在下面评论 . 我有一个完整的php文件,如果您手动放入数据,它可以工作 . 虽然当我放入$ jsonEncodedData时,我无法让它工作 . 思考?

<html>
   <head>
    <title>FusionCharts XT - Column 2D Chart - Data from a database</title>
    <link  rel="stylesheet" type="text/css" href="css/style.css" />

    <!-- You need to include the following JS file to render the chart.
    When you make your own charts, make sure that the path to this JS file is correct.
    Else, you will get JavaScript errors. -->

    <script src="fusioncharts/js/fusioncharts.js"></script>
  </head>

   <body>
 <?php

 try {

# MySQL with PDO_MYSQL
$mysql_host = 'host';
$mysql_database = 'table';
$mysql_username = 'user';
$mysql_password = 'pass';

    $conn = new PDO("mysql:host=$mysql_host; dbname=$mysql_database", $mysql_username, $mysql_password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $conn->exec("SET CHARACTER SET utf8");      // Sets encoding UTF-8

}
catch(PDOException $e) {
echo $e->getMessage();
}

        // Form the SQL query that returns the top 10 most populous countries

        // Execute the query, or else return the error message.
$stm = $conn->prepare("SELECT Name, Visits FROM mysqltable"); //WHERE Area :SelArea");
$stm->execute();
$results = $stm->fetchAll(PDO::FETCH_ASSOC);

 include("fusioncharts.php");

$jsnarray = array();
foreach($results as $k => $v){
    $jsnarray[] = array('label' => $results[$k]['Name'], 'value' => $results[$k]['Visits']);
};
    $jsonEncodedData=json_encode($jsnarray);

    new FusionCharts("type of chart", 
            "unique chart id", 
            "width of chart", 
            "height of chart", 
            "div id to render the chart", 
            "type of data", 
            "actual data");
    $columnChart = new FusionCharts(
            "column2d", 
            "ex1" , 
            "600", 
            "400", 
            "chart-1", 
            "json", 
            '{  
               "chart":
               {  
                  "caption":"Harry\'s SuperMart",
                  "subCaption":"Top 5 stores in last month by revenue",
                  "numberPrefix":"$",
                  "theme":"ocean"
               },
               "data":  //$jsonEncodedData}'); <---I tried to insert this after "data":but no results unlike if you put raw data**
               [  
                  {  
                     "label":"Bakersfield Central",
                     "value":"880000"
                  },
                  {  
                     "label":"Garden Groove harbour",
                     "value":"730000"
                  },
                  {  
                     "label":"Los Angeles Topanga",
                     "value":"590000"
                  },
                  {  
                     "label":"Compton-Rancho Dom",
                     "value":"520000"
                  },
                  {  
                     "label":"Daly City Serramonte",
                     "value":"330000"
                  }
               ]
        }');
    // Render the chart
    $columnChart->render();
?>

    <div id="chart-1"><!-- Fusion Charts will render here--></div>

   </body>

</html>

==============编辑12/28/15 ==========

尝试以下代码没有结果,问题我不应该以“}”结尾,因为它们要求:

$columnChart = new FusionCharts(
            "column2d", 
            "ex1" , 
            "600", 
            "400", 
            "chart-1", 
            "json", 
            '{ 
               "chart":
               {  
                  "caption":"Harry\'s SuperMart",
                  "subCaption":"Top 5 stores in last month by revenue",
                  "numberPrefix":"$",
                  "theme":"ocean"
               },
               "data": ' . $jsonEncodedData);
               //}';
    // Render the chart
    print_r($columnChart);
    $columnChart->render();
?>

    <div id="chart-1"><!-- Fusion Charts will render here--></div>

   </body>

</html>

我想在“手动”方法和“获取方法”(在此编辑中的上方)之间发布数组差异 .

用fetch:

FusionCharts对象([constructorOptions:FusionCharts:private] =>数组(> [type] => column2d [id] => ex1 [宽度] => 600 [高度] => 400 [renderAt] = >>图表-1 [ dataFormat] => json [dataSource] => {“chart”:{>“caption”:“Harry's SuperMart”,“subCaption”:“上个月按收入排名前5位的商店”,“numberPrefix”:“$”, “theme”:“ocean”},“data”:> [{“label”:“John”,“value”:“125”},{“label”:“Jerry”,“value”:“125”} ,{“label”:“Jane”,“value”:“125”}])[constructorTemplate:FusionCharts:private] = >> [renderTemplate:FusionCharts:private] =>)

使用手动方法(有效):

FusionCharts对象([constructorOptions:FusionCharts:private] =>数组(> [type] => column2d [id] => ex1 [宽度] => 600 [高度] => 400 [renderAt] = >>图表-1 [ dataFormat] => json [dataSource] => {“chart”:{>“caption”:“Harry's SuperMart”,“subCaption”:“上个月按收入排名前5位的商店”,“numberPrefix”:“$”, “theme”:“ocean”},“data”:[{>“label”:“Bakersfield Central”,“value”:“880000”},{“label”:“Garden Groove> harbour”,“value”: “730000”},{“label”:“Los Angeles Topanga”,>“value”:“590000”},{“label”:“Compton-Rancho Dom”,“value”:“520000”},{>“ label“:”Daly City Serramonte“,”value“:”330000“}]})> [constructorTemplate:FusionCharts:private] = >> [renderTemplate:FusionCharts:private] =>)

我手边看到两个不同之处,手册在“数据”和结尾}参数周围插入空格 .

2 回答

  • 6

    有一种自动(并且更容易)的方式:

    $stm = $conn->prepare('SELECT Name AS label, Visits AS value FROM mysqltable;');
    $stm->execute();
    $results = $stm->fetchAll(PDO::FETCH_ASSOC);
    $jsonEncodedData = json_encode($results);
    echo $jsonEncodedData;
    

    输出(本地测试):

    [{"label":"Foo","value":"5"},{"label":"Bar","value":"15"}]
    

    这样你可以像这样使用它:

    $columnChart = new FusionCharts('...
    ...
    "data": ' . $jsonEncodedData . '}');
    

    最后请注意 . '}' .


    Before Edit:

    你可以这样做:

    // This part is just for running purposes
    $foo = array (
        0 => Array (
            'Id' => 6,
            'Number' => 1234567890,
            'Visits' => 1,
            'Name' => 'John'
        ),
        1 => array (
            'Id' => 7,
            'Number' => 1236549871,
            'Visits' => 9,
            'Name' => 'Jerry'
        ),
        2 => array (
            'Id' => 8,
            'Number' => 2147483647,
            'Visits' => "3", // Example to output quoted
            'Name' => 'Jane'
        )
    );
    
    $bar = array();
    foreach($foo as $k => $v){
        $bar[] = array('label' => $foo[$k]['Name'], 'value' => $foo[$k]['Visits']);
    }
    
    echo json_encode($bar);
    

    输出:

    [{"label":"John","value":1},{"label":"Jerry","value":9},{"label":"Jane","value":"3"}]
    

    与你的(从问题)比较一行:

    [{label: "CJ Anderson",value: "25"},{label: "Imran Tahir",value: "25"},...]
    

    Note: 我假设 valueVisit 表示 labelName 表示 .

    了解更多关于json_encode的信息 .

  • 2

    作为总结,这是解决问题的部分,包括FirstOne的foreach声明:

    $stm = $conn->prepare("SELECT Name, Visits FROM mysqltable"); //WHERE Area :SelArea");
    $stm->execute();
    $results = $stm->fetchAll(PDO::FETCH_ASSOC);
    
     include("fusioncharts.php");
    
    $jsnarray = array();
    foreach($results as $k => $v){
        $jsnarray[] = array('label' => $results[$k]['Name'], 'value' => $results[$k]['Visits']);
    };
    
        $jsonEncodedData=json_encode($jsnarray);
        //print_r($jsonEncodedData);
    
        new FusionCharts("type of chart", 
                "unique chart id", 
                "width of chart", 
                "height of chart", 
                "div id to render the chart", 
                "type of data", 
                "actual data");
            $columnChart = new FusionCharts(
                    "column2d", 
                    "ex1" , 
                    "600", 
                    "400", 
                    "chart-1", 
                    "json", 
                    '{ 
                       "chart":
                       {  
                          "caption":"Harry\'s SuperMart",
                          "subCaption":"Top 5 stores in last month by revenue",
                          "numberPrefix":"$",
                          "theme":"ocean"
                       },
                       "data": ' . $jsonEncodedData . '}');
            // Render the chart
            print_r($columnChart);
            $columnChart->render();
        ?>
    
            <div id="chart-1"><!-- Fusion Charts will render here--></div>
    
           </body>
    
        </html>
    

    感谢大家帮忙解决问题 .

相关问题