Задача 12. Даны два массива по 20 элементов каждый (заполните случайными числами, так чтобы среди элементов массива при очередно

Задача 12. Даны два массива по 20 элементов каждый (заполните случайными числами, так чтобы среди элементов массива при очередном запуске программы могли встретиться и отрицательные и положительные числа).
Сравните каждый 3-ий элемент 1-ого массива с каждый 2-ым элементов 2-ого массива - сравнение проводите пока не закончится та выборка, которая короче.

Задача из списка

<?php
function mas()
{
	for ($d = 1; $d <= 20; $d++) {
		$array[] = random_int(-100, 100);
	}
	return $array;	
}
	
function compare_elements($n, $m)
{	
	$array1 = mas();
	$array2 = mas();
		
	$d = 1;
	foreach ($array1 as $value1) { //преобразуем  массивы чтобы индексы начинались с 1  
		$first[$d++] =$value1;
	}	
	
	$d = 1;
	foreach ($array2 as $value2) {	
		$second[$d++] = $value2;
	}
	
	
	for ($d = 1; $d <= count($first)/$n && $d <= count($second)/$m; $d++) {
		$a = $first[$d * $n];
		$b = $second[$d * $m];
		
		if ($a > $b) {
			echo "$a больше $b", "<br>";
		} elseif ($a < $b) { 
		    echo "$a меньше $b", "<br>";
		} else {
			echo "$a равно $b", "<br>";
		}
	}
}
		
compare_elements(3, 2);	

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

Ещё один вариант.

<?php
function mas()
{
    for ($d = 1; $d <= 20; $d++) {
        $array[] = random_int(-100, 100);
    }
    return $array;  
}
     
function compare_elements($n, $m)
{   
    $first = mas();
    $second = mas();
    
    reset($second);
    $d = 0;
    
    foreach($first as $a) {
        $d++;
        if ($d % $n == 0) {
            $index = intdiv($d, $n)*$m;
            if (count($second) >= $index) {
                for($i = 1; (($index == $m) 
                      && ($i <= $m-1)) 
                      || (($index != $m) && ($i <= $m)); $i++) {
                    next($second);
                }
                $b = current($second);
                
                if ($a > $b) {
                    echo "$a больше $b", "<br>";
                } elseif ($a < $b) { 
                    echo "$a меньше $b", "<br>";
                } else {
                    echo "$a равно $b", "<br>";
                }
                
            } else {
                break;
            }
        }
    }
}

compare_elements(3, 2);

за вариант решения)

На основании предыдущего варианта, была предложена еще одна модификация

<?php
function mas($n)
{
    for ($d = 1; $d <= $n; $d++) {
        $array[] = random_int(-100, 100);
    }
    return $array;  
}
      
function compare_elements($f, $s, $n, $m)
{   
    $first = mas($f);
	echo  implode(', ', $first);
	echo "<BR>";
	
    $second = mas($s);
	echo  implode(', ', $second);
	echo "<BR>";
	     
    reset($second);
    $d = 0;
     
    foreach($first as $a) {
        $d++;
        if ($d % $n != 0) {
			continue;
		}
        for($i = 1; $i <= $m; $i++) {
            $b = current($second);
			next($second);
        }
				
		if($b == false) {
			echo 'break';
			break;
		}
	         
 		if ($a > $b) {
           	echo "$a больше $b", "<br>";
        } elseif ($a < $b) { 
        	echo "$a меньше $b", "<br>";
        } else {
            echo "$a равно $b", "<br>";
        }
                 
	}
}
 
compare_elements(20, 7, 3, 2);

Нужно заменить

        if($b == false) {
            echo 'break';
            break;
        }

на

        if($b === false) {
            echo 'break';
            break;
        }

Иначе цикл может завершиться раньше, чем нужно, если \$b равно 0.

за проверку

Не за что!