@EVGenyK_ch

Как записать результат функции(простые числа) в массив?

Всем привет, подскажите пожалуйста как записать числа в массив, я сделал функцию которая возвращает простые числа, теперь мне нужно записать эти числа в массив. Правильно ли я поступил заключив выполнение цикла в функцию или нужно делать как-то по другому?
Только начинаю разбираться в php
Вот что у меня получилось:
<?php
function name1()
{
    for ($c = 1; $c <= 100; $c++) { 
        for ($i = 2; $i < $c; $i++) { 
            if ($c % $i == 0) continue 2;
        }
        echo "$c ";

    }
}
name1();
$myarr = array();
$myarr[] = name1();
print_r($myarr);

никак не могу разобраться как в массив передать эти числа
  • Вопрос задан
  • 178 просмотров
Решения вопроса 1
sergiks
@sergiks Куратор тега PHP
♬♬
Надо ясно представлять себе, что на входе, что на выходе.
У каждого «атома» кода, и более крупных штуковин типа функции.

Наверное, стоит разобраться, что возвращает ваша функция. Пока — ничего, т.к. там нет return. Она только печатает значения.

Давайте по шагам. Вот мы в переменную добавим что-то из функции:
function func_a()
{
  return 5;
}

$result = func_a();
$result === 5; // true

Функция может вернуть и массив:
function func_b()
{
   return [1, 2, 3, 4, 5];
}

$result_array = func_b();

В вашей задаче, наверное, лучше формировать массив прямо внутри функции, и возвращать готовенький.

spoiler
/**
 * Collect array of prime numbers up to provided top limit
 * @param int $top limit
 * @return array 
 */
function primes(int $top = 100):array
{
    if ($top <= 1) return [];
    $result = [2];
    for ($i = 3; $i <= $top; $i += 2) {
        for ($j = 3; $j < $i / 2; $j += 2) {
            if ($i % $j === 0) continue 2;
        }
        array_push($result, $i);
    }
    return $result;
}

primes(55) // [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53]

Алгоритм набора простых чисел можно улучшать и улучшать. Погуглите, что человечество уже напридумывало. Как минимум, чётные числа после 2 можно смело пропускать; проверять не до верхнего предела, а только до его половины. Подробнее (на англ.).
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
DoNiFF
@DoNiFF
Backend Developer
Функцию не обязательно, можно в начале создать массив, потом в цикле сделать ее копию и записать туда числа

$myarr = array();
            for ($c = 1; $c <= 100; $c++) {
                for ($i = 2; $i < $c; $i++) {
                    if ($c % $i == 0) continue 2;
                }
                $myarr[] = $c;
            }
        print_r($myarr);
Ответ написан
DanArst
@DanArst
Гриффиндор в моде при любой погоде!
Можно и без функции обойтись
$myArr = array();
for ($c = 1; $c <= 100; $c++) { 
	for ($i = 2; $i < $c; $i++) { 
      if ($c % $i == 0) continue 2;
    }
	array_push($myArr, $c);
}
print_r($myArr);
?>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 03:52
1000 руб./за проект
19 апр. 2024, в 03:01
1000 руб./за проект
18 апр. 2024, в 21:56
2000 руб./за проект