如何通过php访问对象在数组中的位置(json)并更改其值

如何通过php访问对象在数组中的位置(json)并更改其值,php,json,ajax,Php,Json,Ajax,我必须访问数组并更改所选成员的数据以修改和覆盖旧的数据,我已经尝试了好几次,但除了添加数据而不是删除数据外,什么也不做 我试图通过索引传递元素的位置,但它没有替换它。甚至通过它独特的id查看 第一个元素必须覆盖第二个元素,而不是在数组的开头创建一个新元素。 json 我用来尝试修改成员的最后一个代码。 php 我尝试了这个方法,但在json文件中添加了成员以在索引为“I”的新对象中进行更改。您可以使用array\u filter来保留数组键 $data = json_decode(file_

我必须访问数组并更改所选成员的数据以修改和覆盖旧的数据,我已经尝试了好几次,但除了添加数据而不是删除数据外,什么也不做

我试图通过索引传递元素的位置,但它没有替换它。甚至通过它独特的id查看

第一个元素必须覆盖第二个元素,而不是在数组的开头创建一个新元素。 json

我用来尝试修改成员的最后一个代码。 php



我尝试了这个方法,但在json文件中添加了成员以在索引为“I”的新对象中进行更改。

您可以使用
array\u filter
来保留数组键

$data = json_decode(file_get_contents('data.php'), true);    

$filter = array_filter($data, function($row) {
    return $row['email'] == $_POST['email']; // Assuming this is unique
});
如果返回了一个匹配项,并且只有一个匹配项,则可以在数据中更新该索引

if(count(($indexs = array_keys($filter))) == 1) {
    $data[$indexs[0]] = array(
        'surname'=> $_POST['surname'],
        'name'=> $_POST['name'],
        'city'=> $_POST['city'],
        'address'=> $_POST['address'],
        'telephone'=> $_POST['telephone'],
        'email'=> $_POST['email'],
        'startData'=> $_POST['startData'],
        'finishData'=> $_POST['finishData'],
        'cardId'=> $_POST['cardId'],
        'state'=> $_POST['state'],
    );
}
然后重新写入文件。见

如果要更新数组的用户有多封电子邮件,可以循环索引

if(count(($indexs = array_keys($filter))) >= 1)
    foreach($indexs as $key)
        $data[$key] = array(
            'surname'=> $_POST['surname'],
            'name'=> $_POST['name'],
            'city'=> $_POST['city'],
            'address'=> $_POST['address'],
            'telephone'=> $_POST['telephone'],
            'email'=> $_POST['email'],
            'startData'=> $_POST['startData'],
            'finishData'=> $_POST['finishData'],
            'cardId'=> $_POST['cardId'],
            'state'=> $_POST['state'],
        );

您可以使用
array\u filter
保留数组键

$data = json_decode(file_get_contents('data.php'), true);    

$filter = array_filter($data, function($row) {
    return $row['email'] == $_POST['email']; // Assuming this is unique
});
如果返回了一个匹配项,并且只有一个匹配项,则可以在数据中更新该索引

if(count(($indexs = array_keys($filter))) == 1) {
    $data[$indexs[0]] = array(
        'surname'=> $_POST['surname'],
        'name'=> $_POST['name'],
        'city'=> $_POST['city'],
        'address'=> $_POST['address'],
        'telephone'=> $_POST['telephone'],
        'email'=> $_POST['email'],
        'startData'=> $_POST['startData'],
        'finishData'=> $_POST['finishData'],
        'cardId'=> $_POST['cardId'],
        'state'=> $_POST['state'],
    );
}
然后重新写入文件。见

如果要更新数组的用户有多封电子邮件,可以循环索引

if(count(($indexs = array_keys($filter))) >= 1)
    foreach($indexs as $key)
        $data[$key] = array(
            'surname'=> $_POST['surname'],
            'name'=> $_POST['name'],
            'city'=> $_POST['city'],
            'address'=> $_POST['address'],
            'telephone'=> $_POST['telephone'],
            'email'=> $_POST['email'],
            'startData'=> $_POST['startData'],
            'finishData'=> $_POST['finishData'],
            'cardId'=> $_POST['cardId'],
            'state'=> $_POST['state'],
        );

好的,我解决了这个问题,非常感谢@Jaquarh。 以下是我使用的最终代码: php



非常感谢您的帮助。

好的,我解决了这个问题,非常感谢@Jaquarh。 以下是我使用的最终代码: php



非常感谢您的帮助。

array\u push
在数组末尾添加新元素。如果要替换数组中的某些内容,请使用此结构
$arr[$index]=$data
我已经尝试过此方法,但没有替换它,但始终创建了一个新的方法。在这里可以看到我的解决方案
$contentDataArray[0]=$newMemberData-假设此元素始终位于索引点0,这不是动态的@potievIt。例如,您可以使用任何唯一id
array\u push
在数组末尾添加新元素。如果要替换数组中的某些内容,请使用此结构
$arr[$index]=$data
我已经尝试过此方法,但没有替换它,但始终创建了一个新的方法。在这里可以看到我的解决方案
$contentDataArray[0]=$newMemberData-您假设此元素始终位于索引点0,这不是动态的@potievIt是一个示例,您可以使用任何唯一的ID。现在,我尝试此方法,在测试后,如果此方法对我有效或无效,请获得答案。谢谢。更新的答案提供了完整的例子@AndreaFioreNow我尝试了这个,在我测试了它之后,我得到了这个答案,如果它对我有效与否。谢谢。更新的答案提供了完整的示例@AndreaFiore