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

时间:2015-11-10 09:14:13

标签: php

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

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,输出是:

  

IS ARRAY

为什么这一行:

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中的错误?

1 个答案:

答案 0 :(得分:0)

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();
        }
      }
    }