Проблема с: «Предупреждение: неверный аргумент предоставлен для foreach» - PullRequest
0 голосов
/ 31 мая 2011

У меня возникли некоторые проблемы с указанным выше предупреждением для массива.

Я полностью понимаю, что это за предупреждение и чем оно вызвано, и я сделал все возможное, чтобы предотвратить его, ноувы, ни один из них не имеет никакого эффекта.

Предпринятые шаги:

Я проверил массив, объявил его, если он не существует.

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

и

$this->theVariables['associated'] = $this->theVariables['associated'] || array();

Ни на что не влияют.

Я обернул foreach в if, который проверяет, что массив не пустой (!empty()), что он существует, что это массив (is_array()), а затем даже введите приведение массива в объявлении foreach (foreach((array)$this->theVariables['associated'] as $item)), но я все еще получаю это предупреждение.

Поскольку я не могупри отключении отчетов об ошибках на этом конкретном сервере, нет ли другого способа остановить отображение этого предупреждения?

Это сводит меня с ума.

Ответы [ 4 ]

1 голос
/ 31 мая 2011

попробовать:

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

например, если

$this->theVariables['associated'] будет 1 это назначение массива никогда не будет достигнуто:

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

(То же самое касается вашего второго теста)

Что касается комментария Олафура Уэйгса, взгляните на Ленивая оценка .

Например, если ваш тест выглядел примерно так, вы, вероятно, получите проблемы:

<?php
$fakeArray = 'bad';

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

var_dump($fakeArray);

выход

string(3) "bad"
0 голосов
/ 31 мая 2011
if (!$this->theVariables['associated'])

- это , а не , проверяющий, существует ли массив.

Напишите вместо этого:

if (!isset($this->theVariables['associated']) ||
   !is_array($this->theVariables['associated']))
0 голосов
/ 31 мая 2011

Если вам действительно нужно перебрать этот объект, сначала приведите его в виде массива:

foreach((array) $this->theVariable as $key => $value){
     echo $key . " = " . $value . "<br>";
 }
0 голосов
/ 31 мая 2011

Почему просто не сверились с if (is_array($this->theVariables['associated'])){?

...