Home > database >  How to encode json array inside foreach loop using Php
How to encode json array inside foreach loop using Php

Time:09-02

I am working with Php and Rest Api, i am trying encode data (fetching from database) using foreach loop,but data is not displaying as expected,"result" is showing three time instead of one,Here is my current code

$users = Services::all();
        $result = array();
        foreach ($users as $item) {
            $data = array('result' => array('image' => $item['image']));
            array_push($result, $data);
        }
        echo json_encode($result);

Here is my current output

[{"result":{"image":"abc.jpg"}},{"result":{"image":"abc2.jpg"}},{"result":{"image":"abc3.jpg"}}]

But i want "result" should display one time and other data (image) display multiple times (using loop)

CodePudding user response:

Actually, for each item you are adding a result:item pair.

If I understand well, what you want is {result:{pair1,pair2,...,pairN}} with a pair beeing {image:data}

To do so, you have two options :

First you can create your pair list and add it to the final array with the key result.

To do so your code may look like this :

$users = Services::all();
$data_array = array();
foreach ($users as $item) {
    array_push($data_array, array('image' => $item['image']));
}
$result = array('result' => $data_array);
echo json_encode($result);

Second (and maybe best solution for ressource usage) you can add your data to a preinitialised array with the key "result", like this :

$users = Services::all();
$result_array = array('result' => array());
foreach ($users as $item) {
    array_push($result_array['result'], array('image' => $item['image']));
}
echo json_encode($result_array);

Haven't tested my code but the main idea is here.

ADD: The first one is just a redundant version of the second one, but it is useful to have the two code side by side to understand the difference, or to use them for different purpose.

CodePudding user response:

Can You try something like

$users = Services::all();
$result = array('result' => []); // EDIT To avoid error "array_push() expects parameter 1 to be array, null given "
foreach ($users as $item) {
    $data = array('image' => $item['image']);
    array_push($result['result'], $data);
}
echo json_encode($result);

BTW What version of php are you using?! because in php >= 5.4 you can use short array syntax like :

$data = ['image' => $item['image']];
$result['result'][] = $data

  • Related