如何在PHP中替换JSON上的匹配对象?

如何在PHP中替换JSON上的匹配对象?,php,json,Php,Json,在我的代码中,如果名称匹配,我想用新值替换整个对象 $data = file_get_contents('users.json'); $data = json_decode($data, JSON_PRETTY_PRINT); $dataMerge = array([ "name" => $_POST['name'], "username" => $_POST['username'], "email"

在我的代码中,如果名称匹配,我想用新值替换整个对象

$data = file_get_contents('users.json');
$data = json_decode($data, JSON_PRETTY_PRINT);
$dataMerge = array([
    "name" => $_POST['name'],
    "username" => $_POST['username'],
    "email" => $_POST['email'],
    "phone" => $_POST['phone'],
    "website" => $_POST['website'],
]);

$nameToUpdate = $_POST['name'];

for ($i = 0; $i < count($data); $i++) {
    $row = $data[$i];
    if ($row['name'] == $nameToUpdate) {
        $position = $i;
        break;
    };
}

$data = array_splice($dataMerge, $position);

// $json = json_encode($data);
$data = json_encode($data, JSON_PRETTY_PRINT);
file_put_contents('users.json', $data);

运行此代码时,它将删除json文件上的所有对象并插入新对象。我只想替换某个对象。

根据您对我评论的回答,有几件事需要更改:

阵列拼接可能不是这里的最佳解决方案,因为您需要将阵列循环两次,而您可以只循环一次 $dataMerge变量应该只是一个对象,而不是一个包含单个对象的数组。 见下文修订的代码

$data = file_get_contents('users.json');
$data = json_decode($data, JSON_PRETTY_PRINT);
$dataMerge = [
    "name" => $_POST['name'],
    "username" => $_POST['username'],
    "email" => $_POST['email'],
    "phone" => $_POST['phone'],
    "website" => $_POST['website'],
];
foreach ($data as $key => $user) {
    if ($user['name'] == $dataMerge['name']) {
        $data[$key] = $dataMerge;
    }
}
$data = json_encode($data, JSON_PRETTY_PRINT);
file_put_contents('users.json', $data);

您希望添加新记录、插入新用户还是替换现有用户?如果您希望替换现有的under,那么应该基于哪个字段?电子邮件?用户名?我想匹配“名称”。如果匹配,它将被POST中的新数据替换。为什么要尝试使用数组拼接来实现这一点?您已经确定了要替换的元素,所以只需覆盖它即可$数据[$i]=$dataMerge;完成了…?您100%确定名称是唯一标识符吗?json_解码的第二个参数应该是true或false。