$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是唯一的时,才应将数据附加到文件中。
答案 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]
。