Проблема с foreach () Поставлен неверный аргумент - PullRequest
0 голосов
/ 06 июня 2011

Я пытаюсь удалить каждого последователя из массива, используя PHP. Однако я получаю сообщение об ошибке:

Warning: Invalid argument supplied for foreach() in /home/nucleusi/public_html/maxkdevelopment.co.uk/SocialPic/socialPic.php

Пожалуйста, вы можете сказать мне, где я иду не так?

$arg = mysql_query("SELECT `followerUserID` FROM Following 
   WHERE `followingUserID` = '$id'") or die("1. " . mysql_error());
$array = mysql_fetch_array($arg);
foreach($array['followerUserID'] as $accID) {
  mysql_query("UPDATE Accounts SET `Following Count` = (`Following Count`-1) 
    WHERE `id` = '$accID'") or die("2. " . mysql_error());
}
$arg = mysql_query("SELECT `followingUserID` FROM Following 
  WHERE `followerUserID` = '$id'") or die("3. " . mysql_error());
$array = mysql_fetch_array($arg);
foreach($array['followingUserID'] as $accID) {
  mysql_query("UPDATE Accounts SET `Followed Count` = (`Followed Count`-1) 
    WHERE `id` = '$accID'") or die("4. " . mysql_error());
}

Ответы [ 5 ]

1 голос
/ 06 июня 2011

foreach запрашивает массив, возможно, вы не получаете массив из ваших запросов. Добавьте функцию is_array a do var_dump, когда она не является массивом, чтобы увидеть, что происходит.

http://php.net/manual/en/function.is-array.php

1 голос
/ 06 июня 2011

<code>
while ($row = mysql_fetch_array($arg)) 
{</p>

<p>}
1 голос
/ 06 июня 2011

MySQL не будет возвращать массивы в поле, индексирование массива, полученного из запроса, вернет одно поле, а foreach() ожидает массив. То, что вы написали, не может работать. Используйте цикл while() для перебора результатов запроса, как обычно.

0 голосов
/ 30 сентября 2012

эта проблема часто возникает из-за того, что массив пуст.Например, в массиве нет элементов, поэтому, когда вы выполняете foreach, сервер не может ничего обработать и возвращает ошибку.

Что вы можете сделать, это сначала проверить, пуст ли массив, а затем выполнить foreach, если знаетеу вас есть хотя бы один элемент в вашем массиве.

примерно так:

if(empty($yourArray))
{echo"<p>There's nothing in the array.....</p>";}
else
{
foreach ($yourArray as $current_array_item)
{
//do something with the current array item here
} 
}
0 голосов
/ 06 июня 2011

Вы можете выполнить этот запрос за один раз, не используя циклы foreach:

Первый может быть сжат в:

UPDATE Accounts SET `Following Count` = (`Following Count`-1) 
INNER JOIN Following f ON (f.followingUserID = accounts.id)
WHERE F.followingUserId = '$id'

И второй тоже.

UPDATE Accounts SET `Followed Count` = (`Followed Count`-1) 
INNER JOIN Following f ON (f.followingUserID = accounts.id)
WHERE F.followerUserId = '$id'

Теперь вам больше не нужен этот цикл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...