Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.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 问题与:“;警告:为foreach提供的参数无效;_Php_Foreach_Reporting_Warnings - Fatal编程技术网

Php 问题与:“;警告:为foreach提供的参数无效;

Php 问题与:“;警告:为foreach提供的参数无效;,php,foreach,reporting,warnings,Php,Foreach,Reporting,Warnings,我对阵列上的上述警告感到有些苦恼 我完全理解这个警告是什么,是什么导致了它,我已经采取了我所能采取的每一个步骤来阻止它,但是,唉,没有一个是有任何效果的 采取的步骤: 我已经检查了数组,如果不存在就声明它 if(!$this->theVariables['associated']){ $this->theVariables['associated'] = array(); } 及 两者都没有任何效果 我将foreach包装在if中,检查数组是否为空(!empty())

我对阵列上的上述警告感到有些苦恼

我完全理解这个警告是什么,是什么导致了它,我已经采取了我所能采取的每一个步骤来阻止它,但是,唉,没有一个是有任何效果的

采取的步骤:

我已经检查了数组,如果不存在就声明它

if(!$this->theVariables['associated']){
    $this->theVariables['associated'] = array();
   }

两者都没有任何效果

我将
foreach
包装在
if
中,检查数组是否为空(
!empty()
),它是否存在,它是否为数组(
is_array()
),然后甚至在
foreach
声明中键入cast数组(
foreach((array)$this->变量['associated']as$item)
)然而,我仍然得到这个警告

由于我无法关闭此特定服务器上的错误报告,是否有其他方法阻止显示此警告

它快把我逼疯了。

试试:

if (is_array($this->theVariables['associated'])) {
  // your foreach here
}
例如,如果

$this->变量['associated']
将是
1
此数组分配将永远无法到达:

if(!$this->theVariables['associated']){
    $this->theVariables['associated'] = array();
}
(第二次测试也是如此)

至于瓦格斯的评论,请看一看

例如,如果您的测试看起来像这样,您可能会遇到以下问题:

<?php
$fakeArray = 'bad';

if (empty($fakeArray) && !is_array($fakeArray)) {
    $fakeArray = array();
}

var_dump($fakeArray);

为什么不检查
if(is_array($this->theVariables['associated']){

如果确实需要循环该对象,请首先将其转换为数组:

foreach((array) $this->theVariable as $key => $value){
     echo $key . " = " . $value . "<br>";
 }
foreach((数组)$this->变量为$key=>$value){
echo$key.“=”$value.“
”; }
正在检查数组是否存在

写下以下内容:

if (!isset($this->theVariables['associated']) ||
   !is_array($this->theVariables['associated']))

您是否可以对正在使用的变量进行var_转储并将结果发布到此处?您是否确定正在检查正确的数组?或者它在循环中没有被覆盖?
var_转储
在我检查数组返回值
null
var_转储
在我检查并声明它返回
数组(空)之前
正如预期的那样。因此对象现在是一个数组,但每次尝试使用
foreach
@lafur Waage时,我仍然会收到此警告,因为没有他使用
is_数组进行测试的示例代码,我只能猜测他遇到了一个懒惰的评估问题。(例如,使用
!is_empty(…)| |
为_数组之前
检查)@Designermonkey然后请提供您尝试的代码(或者更好,提供完整的代码).As
is_array
通常是万无一失的。我将此答案标记为正确的,因为我无法收回此问题。我们的服务器没有反映在所述代码的每次部署中对代码所做的更改。我刚刚彻底检查了服务器上的代码,发现没有应用我的任何编辑。
foreach((array) $this->theVariable as $key => $value){
     echo $key . " = " . $value . "<br>";
 }
if (!$this->theVariables['associated'])
if (!isset($this->theVariables['associated']) ||
   !is_array($this->theVariables['associated']))