Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] min i max z tablicy dwuwymiarowej
Forum PHP.pl > Forum > Przedszkole
medzie
Witam, dopiero zaczynam php a niestety od razu nauczyciel rzuca na głęboką wodę i gubię się w tym.
Mam do wykonania skrypt, który wyświetli tablicę dwuwymiarową (dowolnie wypełnioną liczbami) (3 × 3),
która obliczy i wyświetli wartość maksymalną i minimalną elementów tablicy

Próbowałam już różnych kombinacji (w tym ify,min(),max()) ale końcowo nic nie działało, więc wrzucam pierwszy kod. Prosiłabym o nakierowanie jak mam się za to zabrać bo nie mam już żadnych pomysłów.
Za każdym razem bierze ostatnią liczbę lub kolumnę/wiersz, czasami losowo.. Z góry dziękuję za pomoc.

  1. $tab=array();
  2.  
  3. for ($i=0;$i<3;$i++) //wiersze
  4. {
  5. for ($j=0;$j<3;$j++) //kolumny
  6. {
  7. $tab[$i][$j]=rand(1,9);
  8. $minimum=$tab[$i][$j];
  9. $maximum=$tab[$i][$j];
  10. $minimum==min($tab);
  11. $maximum==max($tab);
  12. }
  13. }
  14.  
  15. //wyświetlenie tablicy
  16. for ($i=0;$i<3;$i++)
  17. {
  18.  
  19. for ($j=0;$j<3;$j++)
  20. {
  21. echo $tab[$i][$j].'&nbsp;&nbsp;&nbsp;';
  22. }
  23. echo '<br>';
  24. }
  25.  
  26. echo 'minimum: '; echo $minimum;
  27. echo '<br>maximum: '; echo $maximum;
trueblue
Jaki sens mają linie 10 i 11?

Podpowiedź: jeśli jakaś wartość jest większa od A, to być może jest maksimum. A jeśli jakaś wartość jest mniejsza od B, to być może jest minimum.

P.S. Całość możesz zrobić w jednej pętli - dodawać wartości, wyświetlać je i sprawdzać czy dana wartość jest minimum czy maksimum.
YourFrog
Cześć,

Poniżej kawałek kodu prezentujący jak to można zrobić. Starałem się specjalnie wydzielić to do różnych funkcji aby łatwiej Ci było zrozumieć kod. Zgadzam się z przedmówcą że najlepiej wydajnościowo to robić w pętli generującej tablice jednak czasami zachodzi potrzeba napisania kodu wielokrotnego użytku.

  1. <?php
  2.  
  3. /**
  4.  * Generujemy tablice o żądanej wielkości
  5.  *
  6.  * @param int $width Ilość kolumn
  7.  * @param int $height Ilość wierszy
  8.  * @param $callback Funkcja generująca wartość w polu
  9.  *
  10.  * @return array
  11.  */
  12. function generateMatrix(int $width, int $height, $callback): array
  13. {
  14. $result = [];
  15.  
  16. for($columnIndex = 0; $columnIndex < $width; $columnIndex++) {
  17. for($rowIndex = 0; $rowIndex < $height; $rowIndex++) {
  18. $result[$columnIndex][$rowIndex] = $callback();
  19. }
  20. }
  21.  
  22. return $result;
  23. }
  24.  
  25. /**
  26.  * Wyszykujemy minimalną i maksymalną wartość w tablicy
  27.  *
  28.  * @param array $matrix Wynik funkcji generateMatrix
  29.  *
  30.  * @return array Tablica z kluczami min i max
  31.  */
  32. function searchExtremeInMatrix(array $matrix): array
  33. {
  34. $result = [
  35. 'min' => null,
  36. 'max' => null
  37. ];
  38.  
  39. foreach($matrix as $column) {
  40. foreach($column as $value) {
  41. $result['min'] = $value < $result['min'] || $result['min'] == null ? $value : $result['min'];
  42. $result['max'] = $value > $result['max'] || $result['max'] == null ? $value : $result['max'];
  43. }
  44. }
  45.  
  46. return $result;
  47. }
  48.  
  49. /**
  50.  * Rysujemy tablice twu wymiarową na ekranie
  51.  */
  52. function drawTwoDimensionMatrix(array $matrix) {
  53. foreach($matrix as $column) {
  54. foreach($column as $row) {
  55. echo '..' . $row;
  56. }
  57.  
  58. echo PHP_EOL;
  59. }
  60. }
  61.  
  62. // Generujemy tablice
  63. $matrix = generateMatrix(3, 3, fn() => rand(1, 9));
  64.  
  65. // Szukamy skrajnych wartości
  66. $extreme = searchExtremeInMatrix($matrix);
  67.  
  68. // Wyświetlamy wyniki
  69. echo 'Graphics presentation matrix' . PHP_EOL;
  70. drawTwoDimensionMatrix($matrix);
  71.  
  72. echo PHP_EOL;
  73. echo 'Minimum: ' . $extreme['min'] . PHP_EOL;
  74. echo 'Maximum: ' . $extreme['max'];
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.