[英]How can I access the position of an object in the array (json) and change its values by php
我必須訪問數組並更改選擇來修改和覆蓋舊成員的數據,我已經嘗試了幾次,但除了添加它而不是刪除它之外什么都不做。
我嘗試通過它的索引傳遞元素的位置,但它沒有替換它。 甚至查看它的唯一 id。
第一個元素必須覆蓋第二個元素,而不是在數組的開頭創建一個新元素。 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
<?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'=> $_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'],
);
$contenentData = json_encode($elaborateNewMember, JSON_PRETTY_PRINT);
if(file_put_contents($getOldData, $contenentData)) {
echo 'Aggiornamento riuscito.';
}
else
echo "Errore.";
}
}
catch (Exception $e) {
echo 'Eccezione: ', $e->getMessage(), "\n";
}
?>
我試過了,但是在 json 文件中它添加了成員以在索引為“i”的新對象中進行更改。
您可以使用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'=> $_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
<?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'=> $_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'],
'try'=> $indexs[0],
'tryxxx'=> $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->getMessage(), "\n";
}
?>
非常感謝你的幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.