Учебные задачи PHP. Задача 14
Primary tabs
function generationArray($number) // функция создание массива случайных чисел
{
for ($i = 0; $i < $number; $i ++) { // циклом задаем массив
$arr[] = rand(1, 20); // случайными числами в диапазоне [5..12]
}
print_r($arr); // для наглядности проверки кода
return $arr;
}
$a = generationArray(10); // из этого массива $a исключаем все элементы, которые
$b = [12, 5, 17, 6, 4]; // содержаться в этом массиве $b
$result = array_diff($a, $b); // Возвращает array, содержащий элементы array1, отсутствующие в любом из всех остальных массивах.
print_r($result); // для наглядности проверки кода
foreach ($result as $v) { // обходим массив, выводя его элементы
echo $v. ' ';
}- Log in to post comments
- 15737 reads
melisa
Fri, 04/26/2019 - 13:43
Permalink
хорошо, но
хорошо, но решите эту задачу без использования также и array_diff((), просто работая с массивами
Laven
Sat, 04/27/2019 - 16:35
Permalink
Другой вариант кода задачи
<pre><?php function generateArray($number) // функция создание массива случайных чисел { for ($i = 0; $i < $number; $i ++) { // циклом задаем массив $arr[] = rand(1, 20); // случайными числами в диапазоне [5..12] } print_r($arr); // для наглядности проверки кода return $arr; } function compareArr($a, $b) { foreach ($a as $i) { foreach ($b as $j) { if ($i == $j) { $res = null; break; } else { $res = $i; } } $result[] = $res; } return $result; } $a = generateArray(10); // из этого массива $a исключаем все элементы, которые $b = [12, 5, 17, 6, 4]; // содержаться в этом массиве $b $result = compareArr($a, $b); print_r($result); // для наглядности проверки кода foreach ($result as $v) { // обходим массив, выводя его элементы echo $v. ' '; } ?>Laven
Sun, 04/28/2019 - 21:40
Permalink
Модифицировал код задачи
Выше код выполняет условие задачи, но с оговоркой. Если значения выводить через запятую, то будут лишние запятые.
Ниже код лишен этого недостатка:
<pre><?php function generateArray($number) // функция создание массива случайных чисел { for ($i = 0; $i < $number; $i ++) { // циклом задаем массив $arr[] = rand(1, 20); // случайными числами в диапазоне [1..20] } print_r($arr); // для наглядности проверки кода return $arr; } function compareArr($a, $b) { $x = 0; // техническая переменная foreach ($a as $i) { foreach ($b as $j) { if ($i == $j) { $x = $j; // присваиваем любое значение переменной $x break; } } if ($x != 0) { // если переменная содержит значение отличное от "0", то $x = 0; // $x = 0 и переходим к следующей итерации } else { $result[] = $i; // если в текущей итерации совпадений элементов в массивах нет, то заводим очередной элемент массива $a в массив $result для последующего вывода } } return $result; } $a = generateArray(10); // из этого массива $a исключаем все элементы, которые $b = [12, 5, 17, 6, 4]; // содержаться в этом массиве $b $result = compareArr($a, $b); print_r($result); // для наглядности проверки кода foreach ($result as $v) { // обходим массив, выводя его элементы echo $v. ' '; } ?>melisa
Tue, 04/30/2019 - 17:44
Permalink
больше универсальности
if ($x != 0) { // если переменная содержит значение отличное от "0", то $x = 0; // $x = 0 и переходим к следующей итерацииа если в массиве $b 0 будет одним из значений?
лучше сделайте $x типом boolean
Laven
Tue, 04/30/2019 - 21:33
Permalink
Модифицировал код задачи
<pre><?php function generateArray($number) // функция создание массива случайных чисел { for ($i = 0; $i < $number; $i ++) { // циклом задаем массив $arr[] = rand(1, 20); // случайными числами в диапазоне [1..20] } print_r($arr); // для наглядности проверки кода return $arr; } function compareArr($a, $b) { $x = 0; // техническая переменная foreach ($a as $i) { foreach ($b as $j) { if ($i == $j) { $x = true; break; } } if ($x == true) { $x = false; } else { $result[] = $i; // если в текущей итерации совпадений элементов в массивах нет, то заводим очередной элемент массива $a в массив $result для последующего вывода } } return $result; } $a = generateArray(10); // из этого массива $a исключаем все элементы, которые $b = [12, 5, 17, 6, 4]; // содержаться в этом массиве $b $result = compareArr($a, $b); print_r($result); // для наглядности проверки кода foreach ($result as $v) { // обходим массив, выводя его элементы echo $v. ' '; } ?>vedro-compota
Tue, 05/07/2019 - 15:45
Permalink
смысл
Прокомментируйте смысл этих конструкций.
_____________
матфак вгу и остальная классика =)
Laven
Tue, 05/07/2019 - 18:13
Permalink
Прокомментировал код задачи
<pre><?php function generateArray($number) // функция создание массива случайных чисел { for ($i = 0; $i < $number; $i ++) { // циклом задаем массив $arr[] = rand(1, 20); // случайными числами в диапазоне [1..20] } print_r($arr); // для наглядности проверки кода return $arr; } function compareArr($a, $b) { $x = 0; // техническая переменная // обходим два массива и сравниваем каждый элемент двух массивов на предмет равенства, чтобы исключить совпадающий элемент второго массива foreach ($a as $i) { foreach ($b as $j) { if ($i == $j) { // если условие выполняется, то $x = true; // переменной присваиваем значение "true" break; } } if ($x == true) { // если $x == true, то пропускаем текущий элемент массива $b, т.к. по условию он должен быть исключен $x = false; // присваиваем $x значение false, иначе при последующей итерации при $i != $j (стр. 18) элемент массива будет пропущен и все необходимые элементы массива будут выведены } else { $result[] = $i; // если в текущей итерации совпадений элементов в массивах нет, то заводим очередной элемент массива $a в массив $result для последующего вывода } } return $result; } $a = generateArray(10); // из этого массива $a исключаем все элементы, которые $b = [12, 5, 17, 6, 4]; // содержаться в этом массиве $b $result = compareArr($a, $b); print_r($result); // для наглядности проверки кода foreach ($result as $v) { // обходим массив, выводя его элементы echo $v. ' '; } ?>melisa
Thu, 05/09/2019 - 14:20
Permalink
для чего комментровать код
Старайтесь давать комментарии так, как будто Вы ничего не знаете о задаче.
Это бесполезный комментарий, т.к. совершенно не раскрывает смысл того, что же лежит в переменной.
Комментарий должен быть типа
Наконец, назовите саму переменную $isInArray (переменные с типом boolean принято называть, начиная с is. Это придаёт названию переменной вопросительную форму: "Есть ли в массиве?") Это уже немного прояснит её назначение.
if ($i == $j) { // если условие выполняется, то $x = true; // переменной присваиваем значение "true"Комментарии из разряда "капитан очевидность". Это тоже не нужно. Мы и так видим то, что написано в коде.
А вот комментарий должен разъяснять, что за условие:
Ещё раз подчеркну важность смыслового именования переменных. Если бы Ваши $a и $b назывались $firstArray и $secondArray, $i и $j - $firstArraysElement и $secondArraysElement, а $x - $isInArray, возможно комментировать код бы не пришлось. В Вашем случае же постоянно приходится держать в голове содержание 5ти переменных или постоянно заново возвращаться к началу кода, чтобы вспомнить, что же в них лежит... Это, мягко говоря, неудобно. Поверьте, когда Вам понадобиться прочесть даже свой же код даже парумесячной давности, Вы уже меня поймёте :)
Laven
Fri, 05/10/2019 - 09:08
Permalink
Исправил комментарии и наименования переменных
<pre><?php function generateArray($number) // функция создание массива случайных чисел { for ($i = 0; $i < $number; $i ++) { // циклом задаем массив $arr[] = rand(1, 20); // случайными числами в диапазоне [1..20] } print_r($arr); // для наглядности проверки кода return $arr; } function compareArr($firstArray, $secondArray) { $flagIndicatingValueElementsArrayB = null; // переменная-индикатор, предназначенная для присвоения значения true/false // обходим два массива и сравниваем каждый элемент двух массивов на предмет равенства, чтобы исключить совпадающий элемент второго массива foreach ($firstArray as $firstArraysElement) { foreach ($secondArray as $secondArraysElement) { if ($firstArraysElement == $secondArraysElement) { // если очередные элементы массивов $firstArray и $secondArray равны, то $flagIndicatingValueElementsArrayB = true; break; } } if ($flagIndicatingValueElementsArrayB == true) { // если условия = true, то пропускаем текущий элемент массива $b, т.к. по условию он должен быть исключен $flagIndicatingValueElementsArrayB = false; // присваиваем $flagIndicatingValueElementsArrayB значение false, иначе при последующей итерации при $firstArraysElement != $secondArraysElement (стр. 18) элемент массива будет пропущен и все необходимые элементы массива НЕ будут выведены } else { $resultArray[] = $firstArraysElement; // если в текущей итерации совпадений элементов в массивах $firstArray и $secondArray нет, то заводим очередной элемент массива $firstArray в массив $resultArray для последующего вывода } } return $resultArray; } $firstArray = generateArray(10); // из этого массива $firstArray исключаем все элементы, которые $secondArray = [12, 5, 17, 6, 4]; // содержаться в этом массиве $secondArray $resultArray = compareArr($firstArray, $secondArray); print_r($resultArray); // для наглядности проверки кода foreach ($resultArray as $v) { // обходим массив, выводя его элементы echo $v. ' '; } ?>melisa
Fri, 05/10/2019 - 22:05
Permalink
принято
принято
Laven
Mon, 05/13/2019 - 19:55
Permalink
Решение задачи с функцией in_array()
<pre><?php function generateArray($number) // функция создание массива случайных чисел { for ($i = 0; $i < $number; $i ++) { // циклом задаем массив $arr[] = rand(1, 20); // случайными числами в диапазоне [1..20] } print_r($arr); // для наглядности проверки кода return $arr; } function compareArr($firstArray, $secondArray) { foreach ($firstArray as $firstArraysElement) { // обходим первый массив if (!in_array($firstArraysElement, $secondArray)) // если очередной элемент первого массива не содержится в втором массиве, то $resultArray[] = $firstArraysElement; // заносим значение этого элемента в массив $resultArray } return $resultArray; } $firstArray = generateArray(10); // из этого массива $firstArray исключаем все элементы, которые $secondArray = [12, 5, 17, 6, 4]; // содержаться в этом массиве $secondArray $resultArray = compareArr($firstArray, $secondArray); print_r($resultArray); // для наглядности проверки кода foreach ($resultArray as $v) { // обходим массив, выводя его элементы echo $v. ' '; } ?>vedro-compota
Wed, 05/15/2019 - 13:59
Permalink
решение засчитано.
решение засчитано.
_____________
матфак вгу и остальная классика =)