Мне нужно получить доступ к массиву и изменить данные члена, выбранного для изменения и перезаписи старых, я пробовал несколько раз, но ничего не делал, кроме добавления, а не удаления.

Я попытался передать позицию элемента через его индекс, но он не заменяет его. Даже просматривая его уникальный идентификатор.

Первый элемент должен был перезаписать второй, вместо этого был создан новый в начале массива. JSON

[ { "surname": "", "name": "Andrea Fiore", "city": "Crocino", "address": "via Emo Mannucci, 2", "telephone": "123456789", "email": "x@gmail.com", "startData": "2019-07-04", "finishData": "2019-07-25", "cardId": "2", "state": "true" }, { "surname": "Fioregg", "name": "Andrea Fiore", "city": "Crocino", "address": "via Emo Mannucci, 2", "telephone": "123456789", "email": "x@gmail.com", "startData": "2019-07-04", "finishData": "2019-07-25", "cardId": "2", "state": "true" } ] 

Последний код, который я использовал, чтобы попытаться изменить член. PHP

 {amp}lt;?php $getOldData = "data.php"; $elaborateNewMember = array(); try { $contenentData = file_get_contents($getOldData); $elaborateNewMember = json_decode($contenentData, true); $find = array_filter($elaborateNewMember, function($searchMember) { return $searchMember['cardId'] == $_POST['cardId']; }); if(count(($indexs = array_keys($find))) == 1) { $elaborateNewMember[indexs[0]] = array( 'surname'={amp}gt; $_POST['surname'], 'name'={amp}gt; $_POST['name'], 'city'={amp}gt; $_POST['city'], 'address'={amp}gt; $_POST['address'], 'telephone'={amp}gt; $_POST['telephone'], 'email'={amp}gt; $_POST['email'], 'startData'={amp}gt; $_POST['startData'], 'finishData'={amp}gt; $_POST['finishData'], 'cardId'={amp}gt; $_POST['cardId'], 'state'={amp}gt; $_POST['state'], ); $contenentData = json_encode($elaborateNewMember, JSON_PRETTY_PRINT); if(file_put_contents($getOldData, $contenentData)) { echo 'Aggiornamento riuscito.'; } else echo "Errore."; } } catch (Exception $e) { echo 'Eccezzione: ', $e-{amp}gt;getMessage(), "n"; } ?{amp}gt; 

Я попробовал это, но после того, как в файле JSON он добавляет члена для изменения в новом объекте с индексом «я».

Вы можете использовать array_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'={amp}gt; $_POST['surname'], 'name'={amp}gt; $_POST['name'], 'city'={amp}gt; $_POST['city'], 'address'={amp}gt; $_POST['address'], 'telephone'={amp}gt; $_POST['telephone'], 'email'={amp}gt; $_POST['email'], 'startData'={amp}gt; $_POST['startData'], 'finishData'={amp}gt; $_POST['finishData'], 'cardId'={amp}gt; $_POST['cardId'], 'state'={amp}gt; $_POST['state'], ); } 

Затем просто переписать файл. Смотрите рабочую демо здесь

Если у вас есть несколько электронных писем для того пользователя, для которого вы хотите обновить массивы, вы можете перебирать индексы.

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

Хорошо, я решил проблему, большое спасибо @Jaquarh. Вот последний код, который я использовал: php

 {amp}lt;?php $getOldData = "data.php"; $elaborateNewMember = array(); try { $contenentData = file_get_contents($getOldData); $elaborateNewMember = json_decode($contenentData, true); $find = array_filter($elaborateNewMember, function($searchMember) { return $searchMember['cardId'] == $_POST['cardId']; }); if(count(($indexs = array_keys($find))) == 1) { $elaborateNewMember[$indexs[0]] = array( 'surname'={amp}gt; $_POST['surname'], 'name'={amp}gt; $_POST['name'], 'city'={amp}gt; $_POST['city'], 'address'={amp}gt; $_POST['address'], 'telephone'={amp}gt; $_POST['telephone'], 'email'={amp}gt; $_POST['email'], 'startData'={amp}gt; $_POST['startData'], 'finishData'={amp}gt; $_POST['finishData'], 'cardId'={amp}gt; $_POST['cardId'], 'state'={amp}gt; $_POST['state'], 'try'={amp}gt; $indexs[0], 'tryxxx'={amp}gt; $find, ); $contenentData = json_encode($elaborateNewMember, JSON_PRETTY_PRINT); if(file_put_contents($getOldData, $contenentData)) { echo 'Aggiornamento riuscito.'; } else echo "Errore."; }; } catch (Exception $e) { echo 'Eccezzione: ', $e-{amp}gt;getMessage(), "n"; } ?{amp}gt; 

Большое спасибо за твою помощь.