Задача №14. На вход вашей программе подаётся массив случайных чисел (10 элементов) из диапазона от 1 до 20.

Задача из этого списка.
Первое решение задачи:

<?php
/* На вход вашей программе подаётся массив случайных чисел (10 элементов) из диапазона от 1 до 20.
 * Задача: вывести на экран все числа, которые не содержатся в массиве
 *  Решите эту задачу двумя способами: Без использования in_array(), c использованием in_array() */

function createRandomArray($num) { //заполняет случайными цифрами
	for($a = 1; $a <= $num; $a++) {
		$array[] = rand(1, 20);
	}
	return $array;
}
function createRandomArray2($num) { //заполняет массив от 1 до 20
	for($a = 1; $a <= $num; $a++) {
		$array[] = $a;
	}
	return $array;
}
function deleteNumbersInArray($maxArray, $array) { //Удаляет из одного массива элементы второго массива, таким образом выводит числа, которые не содержатся в массиве
	foreach ($maxArray as $key => $elem) {
		foreach ($array as $elem2) {
			if($elem == $elem2) {
				unset($maxArray[$key]);
			}
		}
	}
	return $maxArray;
}
$array = createRandomArray(10);
$maxArray = createRandomArray2(20);
$maxArray = deleteNumbersInArray($maxArray, $array);
foreach($maxArray as $elem) {
	echo $elem, '<br>';
}
?>

Второе решение задачи с помощью функции array_diff:

<?php
/* На вход вашей программе подаётся массив случайных чисел (10 элементов) из диапазона от 1 до 20.
 * Задача: вывести на экран все числа, которые не содержатся в массиве
 *  Решите эту задачу двумя способами: Без использования in_array(), c использованием in_array() */

function createRandomArray($num) { //заполняет случайными цифрами
	for($a = 1; $a <= $num; $a++) {
		$array[] = rand(1, 20);
	}
	return $array;
}
function createRandomArray2($num) { //заполняет массив от 1 до 20
	for($a = 1; $a <= $num; $a++) {
		$array[] = $a;
	}
	return $array;
}
$array = createRandomArray(10);
$array = array_unique($array); //убирает копии
$maxArray = createRandomArray2(20);
$diffInArrays = array_diff($maxArray, $array);
foreach ($diffInArrays as $elem) {
	echo $elem, '<br>';
}
?>

Третье решение с помощью функции in_array:

<?php
/* На вход вашей программе подаётся массив случайных чисел (10 элементов) из диапазона от 1 до 20.
 * Задача: вывести на экран все числа, которые не содержатся в массиве
 *  Решите эту задачу двумя способами: Без использования in_array(), c использованием in_array() */

function createRandomArray($num) { //заполняет случайными цифрами
	for($a = 1; $a <= $num; $a++) {
		$array[] = rand(1, 20);
	}
	return $array;
}
function createRandomArray2($num) { //заполняет массив от 1 до 20
	for($a = 1; $a <= $num; $a++) {
		$array[] = $a;
	}
	return $array;
}
$array = createRandomArray(10);
$array = array_unique($array); //убирает копии
$maxArray = createRandomArray2(20);
foreach ($maxArray as $elem) {
	if(in_array($elem, $array)) {}
	else {
		echo $elem, '<br>';
	}
}
?>

Key Words for FKN + antitotal forum (CS VSU):

melisa's picture

  • Вы неверно поняли условие.
    Никакого второго массива из 20 элементов быть не должно. Вам даны:
    1. Массив из 10 случайных элементов из диапазона [1, 20]
    2. Массив $b = [12, 5, 17, 6, 4];

    Их и нужно сравнивать.

  • Неверное название и комментарий.
    function createRandomArray2($num) { //заполняет массив от 1 до 20

    На самом деле эта функция создаёт не случайный, а определённый массив.
    А комментарий этот комментирует не функцию (она не заполняет массив от 1 до 20), а строку вызова функции:

    $maxArray = createRandomArray2(20);
  • Лишний код.
        if(in_array($elem, $array)) {}
        else {
            echo $elem, '<br>';
        }

    Здесь целесообразно использовать в условии отрицание, тогда не придётся писать блок else вовсе?

        if(!in_array($elem, $array)) {
            echo $elem, '<br>';
        }

Замечательно, что Вы используете array_unique(), в данном решении это оправдано и сократит время обработки.

Остальное обсудим, когда исправите логику (см. п. 1)

Sver4ok's picture

То есть из первого массива нужно убрать числа второго массива, если они там будут?

melisa's picture

да, верно. нужно вывести весь массив случайных чисел, исключая числа, перечисленные во втором массиве.

Sver4ok's picture

Версия с функцией in_array:

<?php
/* На вход вашей программе подаётся массив случайных чисел (10 элементов) из диапазона от 1 до 20.
 * Задача: вывести на экран все числа, которые не содержатся в массиве
 *  Решите эту задачу двумя способами: Без использования in_array(), c использованием in_array() */

function createRandomArray($num) { //заполняет случайными цифрами
	$array = [];
	for ($a = 1; $a <= $num; $a++) {
		$array[] = rand(1, 20);
	}
	return $array;
}
function comparingArrays($arrayUniq, $b) {
	foreach ($arrayUniq as $elem) {
		if (!in_array($elem, $b)) {
			echo $elem, "<br>";
		}
	}
}
$b = [12, 5, 17, 6, 4];
$randomArray = createRandomArray(10);
$arrayUniq = array_unique($randomArray); //убирает повторы из массива
comparingArrays($arrayUniq, $b);

Версия без функции in_array:

<?php
/* На вход вашей программе подаётся массив случайных чисел (10 элементов) из диапазона от 1 до 20.
 * Задача: вывести на экран все числа, которые не содержатся в массиве
 *  Решите эту задачу двумя способами: Без использования in_array(), c использованием in_array() */

function createRandomArray($num) { //заполняет случайными цифрами
	$array = [];
	for ($a = 1; $a <= $num; $a++) {
		$array[] = rand(1, 20);
	}
	return $array;
}
function comparingArrays($arrayUniq, $b) {
	foreach ($arrayUniq as $key => $elem1) {
		foreach ($b as $elem2) {
			if ($elem1 == $elem2) {
				unset($arrayUniq[$key]); //убирает элемент из первого массива, если он есть во втором
			}
		}
	}
	return $arrayUniq;
}
$b = [12, 5, 17, 6, 4];
$randomArray = createRandomArray(10);
$arrayUniq = array_unique($randomArray); //убирает повторы из массива
$finalArray = comparingArrays($arrayUniq, $b);
foreach($finalArray as $elem) {
	echo $elem, "<br>";
}
melisa's picture

принято