Search code examples
phpindexingunset

Wrong format is coming after delete data from json object using PHP


I am deleting the data from array as per multiple index value and did it re-indexing but still I am getting the wrong format. My code is below:

$val = '[{"label":"","value":""},{"label":"Rs 100 to Rs 499","value":"162"},{"label":"Rs 500 to Rs
    999","value":"140"},{"label":"Rs 1000 to Rs 1999","value":"141"},{"label":"Rs 2000 to Rs
    2999","value":"142"},{"label":"Rs 3000 to Rs 3999","value":"143"},{"label":"Rs 4000 to Rs
    4999","value":"144"},{"label":"Rs 5000 to Rs 5999","value":"145"},{"label":"Rs 10000 Above","value":"146"},{"label":"Rs
    20000 Above","value":"147"},{"label":"Rs 30000 Above","value":"148"},{"label":"Rs 50000
    Above","value":"149"},{"label":"Rs 70000 Above","value":"150"},{"label":"Rs 80000 Above","value":"151"},{"label":"Rs
    100000 Above","value":"152"},{"label":"Rs 6000 to Rs 6999","value":"153"},{"label":"Rs 7000 to Rs
    7999","value":"154"},{"label":"Rs 8000 to Rs 8999","value":"155"},{"label":"Rs 9000 to Rs 9999","value":"156"}]';
$val = json_decode($val, true);

// Below are the index values to be deleted.
$keyArr = [0, 2, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18];

foreach ($keyArr as $i) {
    unset($val[$i]);
}
array_values($val);
echo json_encode($val);
exit;

Here I am getting the output like below.

{"1":{"label":"Rs 100 to Rs 499","value":"162"},"3":{"label":"Rs 1000 to Rs 1999","value":"141"},"4":{"label":"Rs 2000
    to Rs 2999","value":"142"},"5":{"label":"Rs 3000 to Rs 3999","value":"143"}}

But my expected result should come like below.

[{"label":"Rs 100 to Rs 499","value":"162"},{"label":"Rs 1000 to Rs 1999","value":"141"},{"label":"Rs 2000
    to Rs 2999","value":"142"},{"label":"Rs 3000 to Rs 3999","value":"143"}]

Solution

  • As i see you're not assigning array_value() output to your real variable (i.e. $val)

    $val='[{"label":"","value":""},{"label":"Rs 100 to Rs 499","value":"162"},{"label":"Rs 500 to Rs
    999","value":"140"},{"label":"Rs 1000 to Rs 1999","value":"141"},{"label":"Rs 2000 to Rs
    2999","value":"142"},{"label":"Rs 3000 to Rs 3999","value":"143"},{"label":"Rs 4000 to Rs
    4999","value":"144"},{"label":"Rs 5000 to Rs 5999","value":"145"},{"label":"Rs 10000 Above","value":"146"},{"label":"Rs
    20000 Above","value":"147"},{"label":"Rs 30000 Above","value":"148"},{"label":"Rs 50000
    Above","value":"149"},{"label":"Rs 70000 Above","value":"150"},{"label":"Rs 80000 Above","value":"151"},{"label":"Rs
    100000 Above","value":"152"},{"label":"Rs 6000 to Rs 6999","value":"153"},{"label":"Rs 7000 to Rs
    7999","value":"154"},{"label":"Rs 8000 to Rs 8999","value":"155"},{"label":"Rs 9000 to Rs 9999","value":"156"}]';
    $val=json_decode($val,True);
    
    //Below are the index values to be deleted.
    $keyArr=[0,2,6,7,8,9,10,11,12,13,14,15,16,17,18];
    
    foreach ($keyArr as $i) {
            unset($val[$i]);
    }
    $val= array_values($val);
    echo json_encode($val);exit;