Учебные задачи - PHP. Задача №14

Задача из списка
Есть два массива "a" и "b". На вход вашей программе подаётся массив "a" случайных
чисел (10 элементов) из диапазона от 1 до 20. Задача: вывести на экран все числа,
которые не содержатся в массиве "b":

$b = [12, 5, 17, 6, 4];

Решите эту задачу двумя способами:
Без использования in_array();
С использованием in_array().

1) без использования in_array:

<?php
$b = [12, 5, 17, 6, 4];

function createArray() {
    for ($i = 1; $i <=10; $i++) {
        $a[] = rand(1, 20);
    }
    return $a;
}

function diffValue($a, $b) {
    foreach ($a as $m => $mas) {
        foreach ($b as $n => $val) {
            if ($mas == $val) {
                unset ($a[$m]);
            }
        }
    }
    foreach($a as $value) {
        echo $value, "<br>";
        }
    }

diffValue(createArray(), $b);

2) c использованием in_array:

<?php
$b = [12, 5, 17, 6, 4];

function createArray() {
    for ($i = 1; $i <=10; $i++) {
        $a[] = rand(1, 20);
    }
    return $a;
}

function diffValue($a, $b) {
	foreach ($a as $mas) {
		if (! in_array("$mas", $b)) {
			echo $mas, "<br>";
		}
	}
}

diffValue(createArray(), $b);
vedro-compota's picture

function diffValue($a, $b) {
    foreach ($a as $m => $mas) {
        foreach ($b as $n => $val) {
            if ($mas == $val) {
                unset ($a[$m]);
            }
        }
    }
    foreach($a as $value) {
        echo $value, "<br>";
        }
    }

приведите вариант решения без unset()

_____________
матфак вгу и остальная классика =)

<?php
$b = [12, 5, 17, 6, 4];
 
function createArray() {
    for ($i = 1; $i <=10; $i++) {
        $a[] = rand(1, 20);
    }
	foreach ($a as $i){
		echo $i, "a<br>";
	}
    return $a;
}

function diffValue($a, $b) {
	$counter = 0;
    foreach ($a as $m => $mas) {
        foreach ($b as $n => $val) {
            if ($mas != $val) {
				$counter++;
				if ($counter == count($b)){
					echo $mas, "<br>";
					$counter = 0;
				}
			} elseif ($mas == $val) {
				$counter = 0;
				break;
			}
		}
    }
}

diffValue(createArray(), $b);
vedro-compota's picture

  • не сильно внятны имена переменных:
      $m $mas и  $n

    исправьте

  • в условном операторе есть некоторая избыточность: if ($mas != $val) {
                   
     if ($counter == count($b)){
                   // .......
       } elseif ($mas == $val) {

    -- в чем она состоит? исправьте (тут есть код, который не влияет на последовательность действий в данном случае)

  • _____________
    матфак вгу и остальная классика =)