I want to merge json data uniquely. I have two json data, need one resulted json data that contains both json data in unique way.
$json1 = '[{"name":"A1","phone":"123"}, {"name":"A2","phone":"456"}]';
$json2 = '[{"name":"A1","phone":"123"}, {"name":"A3","phone":"789"}]';
$decoded_json1 = json_decode($json1, true);
$decoded_json2 = json_decode($json2, true);
var_dump($decoded_json1);
var_dump($decoded_json2);
$merge_json = array_merge($decoded_json1, $decoded_json2);
var_dump($merge_json);
/* I want json data like this
[{"name":"A1","phone":"123"}, {"name":"A2","phone":"456"}, {"name":"A3","phone":"789"}]
*/
But the above code is not working fine it merge the json data but problem is that it's not a unique this object {"name":"A1","phone":"123"}
repeat.
UPDATE:
$json2 = '[{"name":"A1","phone":"123"}, {"name":"A3","phone":"789"}, {"name":"A1","phone":"000"}]';
Try this:
Updated:
$json1 = '[{"name":"A1","phone":"123"}, {"name":"A2","phone":"456"}]';
$json2 = '[{"name":"A1","phone":"123"}, {"name":"A3","phone":"789"}, {"name":"A1","phone":"000"}]';
$array = array_unique(array_merge(json_decode($json1, true), json_decode($json2, true)), SORT_REGULAR);
function data_uniquely($key, $array) {
$_array = array();
foreach ($array as $v) {
if (isset($_array[$v[$key]]))
continue;
$_array[$v[$key]] = $v;
}
$array = array_values($_array);
return json_encode($array);
}
$json = data_uniquely('name', $array);
echo $json;
Json result:
[
{
"name": "A1",
"phone": "123"
},
{
"name": "A2",
"phone": "456"
},
{
"name": "A3",
"phone": "789"
}
]