Write to JSON file using CodeIgniter

11,051

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);
}}?>
Share:
11,051
Pamela Keogh
Author by

Pamela Keogh

Updated on June 04, 2022

Comments

  • Pamela Keogh
    Pamela Keogh almost 2 years

    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.

  • Pamela Keogh
    Pamela Keogh almost 9 years
    Hi Carlos, Yeehaa! that's it :-). Thank you very much for taking the time to help me out. Much appreciated. Pamela