2013-04-03 3 views
0

У меня есть следующий код, и я не могу понять, что с ним не так. Я поставляю массив как аргумент, а is_array ($ primes) возвращает true. Что-нибудь мне здесь не хватает?Недопустимый аргумент, предоставленный foreach(), is_array() возвращает true

function generate_primes($max) 
{ 
$i = 4; 
$primes = [2, 3]; 


while($i < $max) 
{ 
    $isPrime = true; 

    foreach($primes as $value) 
    { 
     if($i % $value == 0) 
     { 
      $isPrime = false; 
      break; 
     } 

    } 
    if($isPrime) 
     $primes = $i; 

    $i++; 
} 

return $primes; 

} 
+3

'$ штрихи = [2, 3]; 'недопустимо, используйте' $ primes = array (2, 3) ' – 2013-04-03 22:16:56

+0

@Akam: Синтаксис коротких массивов действителен, если он использует PHP 5.4 или новее. Ссылки: [1] (http://php.net/manual/en/migration54.new-features.php), [2] (http://php.net/manual/en/language.types.array.php) – BigBagel

+1

Это неверно; '$ primes = [2, 3];' поддерживается более новыми версиями PHP. –

ответ

2

$primes = $i; показывает, что вы повторно назначить переменную $primes после вы найдете свой первый премьер, 5. Он больше не является массивом в этой точке.

Вместо этого используйте:

if($isPrime) 
    array_push($primes,$i); 
+0

Большое вам спасибо, это устранило проблему. –

1

Использование типа PHP массива:

$primes = array(2, 3); 

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

array_push($primes, $i);