Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:非法字符串偏移量-但它是一个数组,并且密钥存在_Php - Fatal编程技术网

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

PHP:非法字符串偏移量-但它是一个数组,并且密钥存在,php,Php,“非法字符串偏移”的帖子太多了,但我没有找到任何解决办法。也许有人可以看看我的代码: function neue($pv){ <== LINE 365 echo "<pre>"; print_r($pv); echo "</pre>"; if (is_array($pv)){ echo "IS ARRAY"; } if (strlen($pv["Speichern"

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

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();
    }
}
我检查它是否为arry,输出是否为:

IS数组

那么,为什么要这样做:

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

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

编辑:

这是第372行:

[setid] =>  
我之前已经打印出数组$pv,并且我已经检查过它是一个数组。函数调用和错误行之间没有其他行。我已经发布了所有代码行

编辑:

var_dump的结果($pv[“Speichen”]);是:

字符串(9)“Speichen”

编辑发现的问题:

我发现了问题。未设置变量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();
    }
}
如果我将代码更改为:

foreach (array_expression as $value)
    statement
foreach (array_expression as $key => $value)
    statement
函数neue($pv){
回声“;
  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();
        }
      }
    }
印刷费(pv); 回声“;
  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();
        }
      }
    }
if(is_阵列($pv)){ 回波“是阵列”;
  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();
        }
      }
    }
} $pv[“setid”]=“foobar”; 如果(strlen($pv[“speichen”])>0{ save(); } }

代码运行时没有任何异常。但我不知道为什么这会导致“Speichen”的错误。可能是PHP中的错误?

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

试试这个


函数neue($pv){//0){//372行的
/webseiten/save.php中的代码是什么?
?您可能没有定义
$pv[“Speichern”]
。请尝试打印出
$pv
数组。这应该可以工作。您确定定义了
$pv[“Speichern”]
?因为你的代码似乎是正确的。正如你在打印结果中看到的那样,“Speichern”是在数组中定义的
$pv
是一个字符串。有了这段代码,就永远不会发生。发布一个MCVE,然后寻找一些愚蠢的事情(你编辑的文件正确吗?)。听起来很明显,但是
var\u dump($pv[“Speichern”])是什么呢
给你。同时尝试用单引号替换双引号,可能不会有什么改变,但可能。。。