PHP中函数中的非法字符串偏移量

时间:2015-03-07 14:52:39

标签: php function

我有这个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是知道的。

你能帮我解决一下我的问题。

感谢。

3 个答案:

答案 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之后打印数组您将得到答案。