Search code examples
phpjsonuniquearray-merge

merge json data uniquely in php


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"}]'; 

Solution

  • 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"
     }
    ]