JSON对象上的array_unique

时间:2018-03-26 22:18:31

标签: php json

$accountData                    = json_decode(file_get_contents($filetxt_1), true);
$newdata['id']                  = $uvon;
$newdata['wallet_address']      = $walletaddress;
$newdata['timestamp']           = time();
$accountData[]         = $newdata;
$array = array_values(array_unique( $accountData, SORT_REGULAR));
file_put_contents($filetxt_1, json_encode($array, JSON_PRETTY_PRINT));

每次这个PHP脚本都是由$ _POST触发时,它应该将新的JSON对象添加到服务器上的文件中。这很好,除了我需要这些对象保持唯一。我试图通过 array_unique array_values 函数实现此目的。

输入两组包含匹配值的数据后,输出为:

[
  {
      "id": "111.222.333.44",
      "wallet_address": "0x34c957891d19c88bc11e56c4ad6b1a65f09fda92",
      "timestamp": 1522101535
  },
  {
      "id": "111.222.333.44",
      "wallet_address": "0x3b958949efcc8362dd05179cce8eb5e16befebda",
      "timestamp": 1522101581
  }
]

id匹配,因此第二个对象不应该在文件中。只有当id,wallet_address和timecode是唯一的时,才应将数据附加到文件中。

1 个答案:

答案 0 :(得分:1)

您可以通过获取所有$uvon值(使用array_column())来检查id值中是否已存在id,并检查该值是否存在或之前,更新JSON文件(wallet_address的相同内容):

$accountData = json_decode(file_get_contents($filetxt_1), true);
$ids = array_column($accountData, 'id');
$was = array_column($accountData, 'wallet_address');
if (!in_array($uvon, $ids) && !in_array($walletaddress, $was)) {
    $newdata['id']                  = $uvon;
    $newdata['wallet_address']      = $walletaddress;
    $newdata['timestamp']           = time();
    $accountData[]         = $newdata;
    file_put_contents($filetxt_1, json_encode($accountData, JSON_PRETTY_PRINT));
}

函数array_unique()只能减少“非复杂”值的数组。例如:

$array = [2,3,4,5,5,5,6,"foo","bar","foo"];
$array = array_unique($array); 

然后$array将包含[2,3,4,5,6,"foo","bar]