Учебные задачи - PHP. Задача №14
Primary tabs
Задача из списка
Есть два массива "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);- Log in to post comments
- 7621 reads
vedro-compota
Fri, 11/01/2019 - 23:07
Permalink
альтернатива
приведите вариант решения без unset()
_____________
матфак вгу и остальная классика =)
den123
Sat, 11/02/2019 - 00:29
Permalink
Без 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
Fri, 11/15/2019 - 09:59
Permalink
замечания
исправьте
if ($counter == count($b)){ // ....... } elseif ($mas == $val) {-- в чем она состоит? исправьте (тут есть код, который не влияет на последовательность действий в данном случае)
_____________
матфак вгу и остальная классика =)
den123
Thu, 11/28/2019 - 15:06
Permalink
Исправил замечания
<?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) { $counter = 0; foreach ($a as $valFromA) { /*дал новые имена переменным*/ foreach ($b as $valFromB) { if ($valFromA != $valFromB) { $counter++; if ($counter == count($b)){ echo $valFromA, "<br>"; $counter = 0; } } else { /*убрал оператор elseif*/ $counter = 0; break; } } } } diffValue(createArray(), $b);vedro-compota
Fri, 11/29/2019 - 13:59
Permalink
уже лучше, но можно сделать,
уже лучше, но можно сделать, так чтобы проверка:
выполнялась только 1 раз за виток внешнего цикла (и, соответственно, действия по ней), а не на каждое неравенство. Попробуйте.
_____________
матфак вгу и остальная классика =)
den123
Sat, 12/14/2019 - 12:32
Permalink
Поправил
<?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 $valFromA) { $counter = True; foreach ($b as $valFromB) { if ($valFromA == $valFromB) { $counter = False; break; } } if ($counter) { echo $valFromA, "<br>"; } } } diffValue(createArray(), $b);vedro-compota
Fri, 01/10/2020 - 13:03
Permalink
решение засчитано
решение засчитано
_____________
матфак вгу и остальная классика =)