Print strings in PHP where item orders are collected from JSON

Issue

I have a JSON item list in the database that holds the the serial number of different items to be printed according to the order of their serial number. The JSON structure is like this:

{
    "item_list": [
        {
            "item_sl": "1",
            "item_print": "flowers"
        },
        {
            "item_sl": "2",
            "item_print": "cars"
        }
    ]
}

After retrieving it from the database, I decoded the items in $items_array and then tried to create variables like $item1, $item2 ... which I wanted to assign to the item_print values from the JSON. The same print values have been already defined earlier ($cars, $flowers). Lastly, I wanted to print all of them. The code is:

$cars = 'Tesla is my favorite.';
$flowers = 'I love all flowers.';

$items_array = json_decode($items_data, true);
foreach ($items_array['item_list'] as $item_list) {
    foreach ($item_list['item_sl'] as $key => $n) {
        ${'item'.$n} = $item_list['item_print'][$key];
    }
}
$all_print = $item1.' '.$item2;
echo $all_print;

But $all_print is returning null, which tells me my approach is not correct. What am I missing here? What would be a better approach for printing the $cars and $flowers variables according to the serial numbers from the JSON?

Solution

First of all, there is no need to use multiple loops when you can achieve the same with a single loop.

Also, there is no need to create variables dynamically and assign values when you can directly decode the JSON and access each value without creating variables and assigning them dynamically.

This should work:

<?php

$items_data = '{
    "item_list": [
        {
            "item_sl": "1",
            "item_print": "flowers"
        },
        {
            "item_sl": "2",
            "item_print": "cars"
        }
    ]
}';

$items_array = json_decode($items_data, true);

foreach ($items_array['item_list'] as $item) {
    ${'item' . $item['item_sl']} = $item['item_print'];
}

$all_print = $item1.' '.$item2;
echo $all_print;

?>

Output:

flowers cars

Answered By – OMi Shah

This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply

(*) Required, Your email will not be published