0

I have a small issue i can't seem to work around. i have some data i'm pulling from the database and before i display the data, i want to manipulate some values in there. here's my function handling these:

public function getPageContent($id) 
{
    $menutopic_model = new Menu_Topic();
    $content = $menutopic_model->getAllContent($id);

    //var_dump($content);        

    $data = array();

    foreach ($content as $value)
    {
         $title = explode(',', $value->title);
         $filename = explode(',', $value->filename);

         $data['topicname'] = $value->topicname;
         $data['title'] = $title;
         $data['filename'] = $filename;

    }    

   //var_dump($data);

}

Now, when i dump var_dump($content);, i get the entire array of data as it should be:

array(2) {
    [0]=>
    object(stdClass)#346 (3) {
      ["topicname"]=>
      string(19) "Signs giving orders"
      ["title"]=>
      string(42) "Stop,No entry,No cycling,No motor vehicles"
      ["filename"]=>
      string(179) "DQP0GVcUA2dG8ZfqeVYLO68YodgYnJMOjJw2o2iC.png,vWUcHGX3VVKPT08JXh9mAqZ40pT0vfDJ78Yoqovz.png,bplX8bbwHzHKX9n6SvvQiYNhkWwKxi2bhsrQ94U2.png,8KAEovxQn3EgzHoZg1euSgNYTFupnLdKusJ4SIEP.png"
    }
    [1]=>
    object(stdClass)#345 (3) {
      ["topicname"]=>
      string(13) "Warning Signs"
      ["title"]=>
      string(111) "Road narrows ahead both sides,Road narrows on right (left if symbol reversed),Crossroads,Junction on bend ahead"
      ["filename"]=>
      string(179) "uZ7fnDjlYfKU3pdSQ7wAq4siFryA6jSEitmRyPhp.png,4pslo6cC0I2E606DscWxiDD3sCBW7ZGaESQES4r0.png,xdVBMpV6PTLtX48M67kfWOqy59rsYMDZMuWbqDwl.png,hLtIGikARgARqmSqit4mqNXRFJthipH6O5vqxlbN.png"
    }
  }

but after passing the data through the foreach, this var_dump($data); only returns the last item in the array:

array(3) {
  ["topicname"]=>
  string(13) "Warning Signs"
  ["title"]=>
  array(4) {
    [0]=>
    string(29) "Road narrows ahead both sides"
    [1]=>
    string(47) "Road narrows on right (left if symbol reversed)"
    [2]=>
    string(10) "Crossroads"
    [3]=>
    string(22) "Junction on bend ahead"
  }
  ["filename"]=>
  array(4) {
    [0]=>
    string(44) "uZ7fnDjlYfKU3pdSQ7wAq4siFryA6jSEitmRyPhp.png"
    [1]=>
    string(44) "4pslo6cC0I2E606DscWxiDD3sCBW7ZGaESQES4r0.png"
    [2]=>
    string(44) "xdVBMpV6PTLtX48M67kfWOqy59rsYMDZMuWbqDwl.png"
    [3]=>
    string(44) "hLtIGikARgARqmSqit4mqNXRFJthipH6O5vqxlbN.png"
  }
}

what should i change in the above to get the correct result?

1
  • This happens because everytime you set for example $data['topicname'] = $value->topicname; - which will always gonna be the last item. Commented Apr 13, 2017 at 15:23

2 Answers 2

1

You were getting only last value just because you were over-writing values in array with the below code, which you were using.

$data['topicname'] = $value->topicname;
$data['title'] = $title;
$data['filename'] = $filename;

Changed code:

public function getPageContent($id) 
{
    $menutopic_model = new Menu_Topic();
    $content = $menutopic_model->getAllContent($id);      

    $data = array();

    foreach ($content as $value)
    {
         $title = explode(',', $value->title);
         $filename = explode(',', $value->filename);

         $data[]=array(
             'topicname'=>$value->topicname,
             'title'=>$title,
             'filename'=>$filename);
    }    

     //var_dump($data);

 }
Sign up to request clarification or add additional context in comments.

Comments

0

You are reusing the same array occurance each time round the loop. So create your array and then add it asa new occurance to the real array

public function getPageContent($id) 
{
    $menutopic_model = new Menu_Topic();
    $content = $menutopic_model->getAllContent($id);

    //var_dump($content);        

    foreach ($content as $value)
    {
        $title = explode(',', $value->title);
        $filename = explode(',', $value->filename);

        $d = array();
        $d['topicname'] = $value->topicname;
        $d['title'] = $title;
        $d['filename'] = $filename;

        $data[] = $d;
    }    

   //var_dump($data);

}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.