Write to JSON file using CodeIgniter

2019-07-07 17:29发布

问题:

I'm very new to php, mySql and CodeIgniter. I'm trying to read from mySql file and write the data read to a JSON file using CodeIgniter. I can read the data from mySql and view it and can create JSON file but have gotten totally bogged down with all the different information I'm reading on internet. I've been searching all night to see where my code for writing to JSON even goes, ie Controller, View, Model etc.

This is "European_countries_model.php"

// Model to access database
class European_countries_model extends CI_Model {

    public function __construct()
    {
        $this->load->database();

    }

    public function get_countries()
    {
        // get data from table "european_countries"
        $query = $this->db->get('european_countries');
            return $query->result();
    }

}

This is my view which works (set up to see if it was reading database ok):

<?php

// TEST - display data
echo "Euopean Countries<br/>";

foreach ($countries as $country){
    echo $country->euro_id."  ".$country->title."  ".$country->flag_name."  ".$country->population."  ".$country->avg_annual_growth."  ".$country->date."<br/>";
}

?>

This is my controller "European_countries.php"

<?php

// European countries controller
class European_countries extends CI_Controller {

    public function __construct()
    {
        parent::__construct();
        $this->load->model('European_countries_model');
        // file helper contains functions that assist in working with files
        $this->load->helper('file');
        $this->load->database();
    }

    // pass all countries from model to view????
    public function index()
    {
        $data['countries'] = $this->European_countries_model->get_countries();
        //$this->load->view('european_countries_view', $data);

        $response = array();
        $posts = array();
        foreach ($countries as $country) 
        { 
            $title=$country['euro_id']; 
            $flag=$country['flag_name']; 
            $population=$country['population'];
            $avg_annual_gcountryth=$country['avg_annual_gcountryth'];
            $date=$country['date'];

            $posts[] = array('title'=> $title, 
                'flag_name'=> $flag_name,
                'population'=>$population,
                'avg_annual_gcountryth'=>$avg_annual_gcountryth,
                'date'=>$date
                );
        } 
        $response['posts'] = $posts;

        $fp = fopen('./eur_countries_array.json', 'w');
        fwrite($fp, json_encode($response));


/*  
        if ( ! write_file('./eur_countries_array.json', $arr))
        {
            echo 'Unable to write the file';
        }
        else
        {
            echo 'file written';
        }   
*/
    }
}

?>

I think I've gone from following php to mySql to CodeIgniter and back again so many times, I've completely messed it up. Any help appreciated.

回答1:

You are looping the countries object as an array. Have a look at this

<?php
class European_countries extends CI_Controller {

public function __construct()
{
    parent::__construct();
    $this->load->model('European_countries_model');
    $this->load->helper('file');
    $this->load->database();
}

public function index()
{
    $countries = $this->European_countries_model->get_countries(); 
    $data['countries'] = $countries;

    $response = array();
    $posts = array();
    foreach ($countries as $country) 
    { 
        $posts[] = array(
            "title"                 =>  $country->euro_id,
            "flag"                  =>  $country->flag_name,
            "population"            =>  $country->population,
            "avg_annual_gcountryth" =>  $country->avg_annual_gcountryth,
            "date"                  =>  $country->date
        );
    } 
    $response['posts'] = $posts;
    echo json_encode($response,TRUE);

    //If the json is correct, you can then write the file and load the view

    // $fp = fopen('./eur_countries_array.json', 'w');
    // fwrite($fp, json_encode($response));

    // if ( ! write_file('./eur_countries_array.json', $arr))
    // {
    //     echo 'Unable to write the file';
    // }
    // else
    // {
    //     echo 'file written';
    // }   
    // $this->load->view('european_countries_view', $data);
}}?>