我有这个PHP函数:
function editDatas($datas, $got, $to_find, $to_replace) {
foreach($datas['datas'] as $key => $rows) {
foreach($rows as $number => $row) {
if($row['id'] == $got) {
$datas['datas'][$key][$number][$to_find] = $to_replace;
return $datas;
}
}
}
}
这个电话:
$datas = json_decode(file_get_contents('datas.json'), true);
$datas = editDatas($datas, 'hotel_name', "value", 'My new hotel name');
我的json实际上是这样的:
{
"datas": [
{
"category": "General",
"id": "hotel_name",
"type": "input",
"maxlength": "15",
"size": "10",
"label": "Hotel name",
"help": "Hotel name",
"value": "Rubi's hotel"
},
...
我正在尝试替换json中的某些值。
我面临的问题是这个错误:
Illegal string offset 'id' in line 33
我的功能如下:
if($row['id'] == $got) {
我不明白为什么,因为id
是知道的。
你能帮我解决一下我的问题。
感谢。
答案 0 :(得分:1)
再想想你在迭代的方式和地点。
foreach($datas['datas'] as $key => $rows) {
// $key is 0, 1, ... and $rows is the object
foreach($rows as $number => $row) {
// $number is category, id, type ... and
// $row is General, hotel_name, ...
知道了这一点,你可以将你的if重写为
if ($number == 'id' && $row == $got) {
}
答案 1 :(得分:1)
我认为你的函数中有一个太多的循环。试试这个:
function editDatas($datas, $got, $to_find, $to_replace) {
foreach($datas['datas'] as $key => $row) {
if($row['id'] == $got) {
$datas['datas'][$key][$to_find] = $to_replace;
return $datas;
}
}
}
答案 2 :(得分:0)
首先请使用print_r函数在json_decode之后打印数组您将得到答案。