PHP:非法的字符串偏移量-但它是一个数组并且键存在


PHP: Illegal string offset - But it is an array and the key exists

有很多关于"非法字符串偏移"的帖子,但我没有找到任何解决方案。也许有人看了我的代码:

function neue($pv){                    <== LINE 365
    echo "<pre>";
    print_r($pv);
    echo "</pre>";
    if (is_array($pv)){
        echo "IS ARRAY";
    }
    if (strlen($pv["Speichern"])>0){   <== LINE 372
        save();
    }
}

这只是一个片段,但它显示了相关的部分。$pv是一个数组,print_r的输出为:

Array (
    [bez] => Test
    [gruppe] => 0
    [MoAnf] => 11:00
    [MoEnd] => 12:00
    [Speichern] => Speichern
    [PHPSESSID] => d356016bf4c5c5b5758f526ba4e4108e
    [setid] =>  
)

我检查它是否是arry,输出是:

是阵列

那么为什么这条线:

if (strlen($pv["Speichern"])>0){

投掷:

警告:中的字符串偏移量"Speichern"非法/webseiten/save.php在线372

编辑:

这是372行:

if (strlen($pv["Speichern"])>0){

我之前已经打印出了数组$pv,并检查了它是一个数组。函数调用和错误行之间没有其他行。我已经张贴了所有的代码行。

编辑:

var_dump($pv["Speichern"])的结果;是:

string(9)"Speichern"

编辑发现的问题:

我发现了问题。未设置变量setid。

[setid] =>  

如果我将代码更改为:

function neue($pv){                    
    echo "<pre>";
    print_r($pv);
    echo "</pre>";
    if (is_array($pv)){
        echo "IS ARRAY";
    }
    $pv["setid"] = "foobar";
    if (strlen($pv["Speichern"])>0){   
        save();
    }
}

代码运行时没有任何异常。但我不知道为什么这会导致"Speichern"出现错误。也许是PHP中的一个错误?

foreach构造提供了一种简单的方法来迭代数组。foreach只适用于数组和对象,当您尝试在具有不同数据类型或未初始化变量的变量上使用它时,它会发出错误。有两种语法:

foreach (array_expression as $value)
    statement
foreach (array_expression as $key => $value)
    statement

试试这个。

  function neue($pv){                    //<== LINE 365
        echo "<pre>";
        print_r($pv);
        echo "</pre>";
        if (is_array($pv)){
            echo "IS ARRAY";
        }
     foreach($pv as $pv){
        if (strlen($pv["Speichern"])>0){   //<== LINE 372
            save();
        }
      }
    }