2017-03-01 3 views
0

Je souhaite fusionner des données json uniquement. J'ai deux données json, besoin d'une donnée json qui contient les deux données json de manière unique.fusionner des données json uniquement dans php

$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"}] 
*/ 

Mais le code ci-dessus ne fonctionne pas bien, il fusionner les données JSON mais le problème est que ce n'est pas unique, cet objet {"name":"A1","phone":"123"} répétition.

MISE À JOUR:

$json2 = '[{"name":"A1","phone":"123"}, {"name":"A3","phone":"789"}, {"name":"A1","phone":"000"}]'; 

Répondre

0

Essayez ceci:

Mise à jour:

$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; 

résultat JSON:

[ 
{ 
    "name": "A1", 
    "phone": "123" 
}, 
{ 
    "name": "A2", 
    "phone": "456" 
}, 
{ 
    "name": "A3", 
    "phone": "789" 
} 
] 
+0

Cela ne fonctionne pas pour tout type de données json vérifier la mise à jour dans ma question cela ne fonctionne pas pour ce json –

+0

@PakDeveloper, jetez un oeil à la poste à nouveau, je l'ai mis à jour. – rescobar

0

PHP ne va pas savoir ce qui est unique et ce qui est pas, vous allez devoir faire manuellement ce.

Code

<?php 

$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); 

$newArray = []; 

foreach($decoded_json1 as $row) { 
    $hash = hash('SHA256', json_encode($row)); 
    $newArray[$hash] = $row; 
} 

foreach($decoded_json2 as $row) { 
    $hash = hash('SHA256', json_encode($row)); 
    $newArray[$hash] = $row; 
} 

// remove the hash keys 
$newArray = array_values($newArray); 

var_dump($newArray); 

sortie

array(3) { 
    [0]=> 
    array(2) { 
    ["name"]=> 
    string(2) "A1" 
    ["phone"]=> 
    string(3) "123" 
    } 
    [1]=> 
    array(2) { 
    ["name"]=> 
    string(2) "A2" 
    ["phone"]=> 
    string(3) "456" 
    } 
    [2]=> 
    array(2) { 
    ["name"]=> 
    string(2) "A3" 
    ["phone"]=> 
    string(3) "789" 
    } 
} 
+0

Cela ne fonctionne pas pour tout type de données json vérifier la mise à jour dans ma question cela ne fonctionne pas pour ce json –

+0

Alors qu'est-ce qui doit être unique? juste le nom? – Augwa

0

array_merge() filtre uniquement dupliqué membres clés, vous pouvez donc utiliser json_encode(), json_decode() et array_unique() à faire:

$tmp = array_map('json_encode', $merge_json); // Encode everyone array members. 
$tmp = array_unique($tmp); // Filter duplicated 
$tmp = array_values($tmp); // Re generate array indexes 
$tmp = json_encode($tmp); 
echo $tmp; 

Résultat:

[{"name":"A1","phone":"123"}","{"name":"A2","phone":"456"}","{"name":"A3","phone":"789"}]