2

I have this data

string(94) "[{"value":"Charger"},{"value":"Bag Only"},{"value":"Data Privacy Filter"},{"value":"Headset"}]"

now I have set an array like this

$accessoriesID = array ("Charger" => "11043" , 
"Mouse" => "11044", 
"Bag With Strap" => "11045", 
"Bag Only" => "11046",
"Cable Lock" => "11047",
"Data Privacy Filter" => "11048",
"Numeric Lock" => "11049",
"Headset" => "11050",
"HDMI to VGA adapter" => "11051",
"LAN Adapter" => "12223",
"Others (Please include in the remarks box below.)" => "11052"
);

now here's my code

foreach($_POST['Acc'] as $accessories)
{
   $arrAccesories[]['value'] = $accessories;    
}

var_dump(json_encode($arrAccesories));    

what I am trying to achieve is to merge the 2 arrays with the same value so the expected output should be like this

string(94) "[{"value":"Charger", "id": "11043"},{"value":"Bag Only", "id": "11046"},{"value":"Data Privacy Filter", "id": "11048"},{"value":"Headset", "id": "11050"}]"

I just want some guidance on how to achieve this or reference so I can learn to do these things.

2 Answers 2

1

you can use normal for loop:

$arrAccesories = '[{"value":"Charger"},{"value":"Bag Only"},{"value":"Data Privacy Filter"},{"value":"Headset"}]';
$arrAccesories = json_decode($arrAccesories, true);

$accessoriesID = array ("Charger" => "11043", 
"Mouse" => "11044", 
"Bag With Strap" => "11045", 
"Bag Only" => "11046",
"Cable Lock" => "11047",
"Data Privacy Filter" => "11048",
"Numeric Lock" => "11049",
"Headset" => "11050",
"HDMI to VGA adapter" => "11051",
"LAN Adapter" => "12223",
"Others (Please include in the remarks box below.)" => "11052"
);

for ($i=0; $i < count($arrAccesories); $i++) {
  $value = $arrAccesories[$i]['value'];
  if (isset($accessoriesID[$value])) {
    $arrAccesories[$i]['id'] = $accessoriesID[$value];
  }
}

var_dump(json_encode($arrAccesories));
Sign up to request clarification or add additional context in comments.

2 Comments

just an empty string(2) "[]"
try to dump $arrAccesories only before json_encode functionality
0

You could use array_map() if you prefer functional style code, but a foreach() is perfectly suitable. If you decode the json into an array of objects, you don't even need to explicitly modify by reference with &.

In case a value is not found as a key in your lookup array, it is a good idea to use a fallback/default value.

Code: (Demo)

$arrAccesories = '[{"value":"Charger"},{"value":"Bag Only"},{"value":"Data Privacy Filter"},{"value":"Headset"}]';
$arrAccesories = json_decode($arrAccesories);

$accessoriesID = [
    "Charger" => "11043", 
    "Mouse" => "11044", 
    "Bag With Strap" => "11045", 
    "Bag Only" => "11046",
    "Cable Lock" => "11047",
    "Data Privacy Filter" => "11048",
    "Numeric Lock" => "11049",
    "Headset" => "11050",
    "HDMI to VGA adapter" => "11051",
    "LAN Adapter" => "12223",
    "Others (Please include in the remarks box below.)" => "11052"
];
$default = $accessoriesID['Others (Please include in the remarks box below.)'];

foreach ($arrAccesories as $row) {
    $row->id = $accessoriesId[$row->value] ?? $default;
}

echo json_encode($arrAccesories);

Output:

[{"value":"Charger","id":"11052"},{"value":"Bag Only","id":"11052"},{"value":"Data Privacy Filter","id":"11052"},{"value":"Headset","id":"11052"}]

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.