Мне нужно найти минимум и максимум в многомерном массиве в PHP, у меня есть то, что, как я думал, будет работать ниже, но оно продолжает давать мне ошибку синтаксического анализа, это домашнее задание, и я не прошу кого-либо сделать это для меня, но я новичок, и любая помощь будет оценена по достоинству.
<?php /* 2 dimensional array in PHP - strictly an array of arrays */ $multable[] = array("11", "12", "15", "22", "41", "42"); $multable[] = array("6", "7", "16", "17", "22", "23"); $multable[] = array("1", "15", "16", "20", "22", "3"); # --------------------------------------------- ?> <html> <head> <title>An array of arrays in PHP</title> </head> <body bgcolor=white> <h2>Two dimensional array</h2><br> <table border=2 cellpadding=2 cellspacing=2> <?php /* display a table from a 2D array */ for ($j=0;$j<3;$j++) { print "<tr>"; for ($k=0;$k<6;$k++) { echo "<td>",$multable[$j][$k],"</td>"; } print "</tr>"; $max_value = 0; foreach ($multable as $myMax) { if ($max_value<$myMax) { $max_value = $myMax; } } echo $max_value; ?> </table> </body> </html>
Для этого есть и однострочный:
$max = max( array_map("max", $multable) );
используйте функции max()
и min()
php.
Максимум:
<?php $multable = array(); $multable[] = array("11", "12", "15", "22", "41", "42"); $multable[] = array("6", "7", "16", "17", "22", "23"); $multable[] = array("1", "15", "16", "20", "22", "3"); $max = -99999999; foreach($multable as $sub){ $tempMax = max($sub); if($tempMax > $max){ $max = $tempMax; } } echo $max; ?>
Вы можете выяснить min 🙂
Ваша итерация foreach
только одно измерение – каждый $myMax
является одним из ваших шести списков элементов, а не отдельным скалярным значением. Вот почему ваше сравнение не работает, и условие не является истинным, вы пытаетесь сравнить скаляр с массивом. То, что вы называете $myMax
, более целесообразно называться $currentRow
Это нормально, потому что PHP имеет некоторые функции для поиска min и max массива
http://us.php.net/manual/en/function.min.php
http://us.php.net/manual/en/function.max.php
$max_value = 0; $min_value = $multable[0][0]; foreach ($multable as $currentRow) { // COMPARE CURRENT ROW's MIN/MAX TO MIN/MAX_VALUE // AND MAKE NEW ASSIGNMENT IF APPROPRIATE }
Или передайте это и посмотрите, что говорит ваш учитель:
function fComp ($f) {return function ($a,$b) use ($f) {return $f($a, $f($b));};} $max = array_reduce($multable, fComp('max'), $multable[0][0]); $min = array_reduce($multable, fComp('min'), $multable[0][0]); echo "max: $max <br />"; echo "min: $min";
PS – в ваших предыдущих итерациях для создания таблицы HTML было бы хорошей формой потерять константы. Используйте count
чтобы получить длину массива вместо этого – или еще лучше – используйте foreach
как и в дальнейшем. (Даже с foreach
вам все равно нужно, чтобы два из них были вложенными, он не выполняет итерацию двухмерного массива по элементам)
Для минимального значения
echo min(array_map("min", $multable));
Максимальное значение
echo max(array_map("max", $multable));
$minArray = array(); foreach($arrayVal as $arrI=> $arrK) { if($arrK == min($arrayVal ) ) { array_push($minArray , $arrayVal ); } } print_r($minArray);
Ну вот 🙂