Универсальный обход по массиву
Предлагаю вашему вниманию PHP-код - универсальный обходчик любого массива с любым представлением. Используем две функции: 1) функция с циклом (метод ArrFor() в классе) и 2) функция (как аргумент) с оформлением результатов обхода по массиву в цикле.
class Gena { function ArrFor($m0,$m1,$f)//Цикл по массиву { foreach ($m1 AS $k=>$v) { $r.=$f($k,$v,++$i,$m0);//Функция - вид отображения } return $r; } } //Метка и любые др. данные $m0=[ 'met'=>12, ]; //Массив данных для обхода $m1=[ 'd'=>8, 'f'=>10, 'g'=>12, 'h'=>14, 'i'=>16, 'j'=>18, ];//print_r($m1); $ob=new Gena(); //Вариант-1 echo $ob->ArrFor($m0,$m1,'uni1')."\n"; function uni1($k,$v,$i,$m0=[]) { return "$i) $k - $v == {$m0['met']}<br>\n"; } //Вариант-2 echo "<form><select size='3' multiple name='sel[]'>\n". $ob->ArrFor($m0,$m1,'uni2'). "</select></form><br>\n\n"; function uni2($k,$v,$i,$m0=[]) { $s=($v==$m0['met'])?' selected':''; return "\t<option value='$k'$s>$i) $k - $v == {$m0['met']}</option>\n"; } //Вариант-3 echo "<ul>\n".$ob->ArrFor($m0,$m1,'uni3')."</ul>\n\n"; function uni3($k,$v,$i,$m0=[]) { return "\t<li>$i) $k - $v == {$m0['met']}</li>\n"; } //Вариант-4 echo "<ul>\n".$ob->ArrFor($m0,$m1,function($k,$v,$i,$m0=[]) { return "\t<li>$i) $k - $v == {$m0['met']}</li>\n"; })."</ul>\n\n"; //Вариант-5 $f=function($k,$v,$i,$m0=[]) { return "\t<li>$i) $k - $v == {$m0['met']}</li>\n"; }; echo "<ul>\n".$ob->ArrFor($m0,$m1,$f)."</ul>\n\n";
Предлагаю пять вариантов применения данного метода с различными способами передачи аргумента в качестве функции представления и различными видами представлений результатов обхода массива циклом.
или
class Gena{ function superF($m,$n,$f,$ar=[])//Массив, Метка, Функция, Доп. массив { return $f($m,$n,$ar);//Массив получает функция } function superForeach($m,$n,$f,$ar=[])//Массив, Метка, Функция, Доп. массив { $r=''; foreach($m as $k => $v) $r.=$f($k,$v,$n,$ar); return $r; } } $G=new Gena;//Создаем объект $arr=[1,2,3,4,5,6,12,15,22];//Массив для перебора $Gm1=$G->superF($arr, 3, function($m,$n){ $r=['',0,1]; $n=count($m)-1; foreach($m as $k => $v) { $z=$n!=$k?', ':'';//Запятая $r[0].="$k=>$v$z";//Список $r[1]+=$v; //Сумма $r[2]*=$v; //Факториал } return $r; }); echo "<b>Список:</b> $Gm1[0]<br>\n"; echo "<b>Сумма:</b> $Gm1[1]<br>\n"; echo "<b>Факториал:</b> $Gm1[2]<br>\n"; $Gm2=$G->superForeach($arr, 3, function($k,$v,$n){ $c=$v!=$n?'':' class="c"'; return "\t<li$c>$k - $n=$v</li>\n"; }); echo "<ul>\n$Gm2</ul>";