2011-03-17 202 views
3

我需要在PHP中查找多維數組中的最小值和最大值,我有我認爲會在下面工作,但它不斷給我一個解析錯誤,這是作業和我我沒有要求任何人爲我做,但我是一個初學者,任何幫助,將不勝感激。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> 

回答

1

使用max()min() php的功能。

+0

看到文檔的php.net,並嘗試自己。 – Gaurav 2011-03-17 04:48:11

0

您的foreach迭代只做一個維度 - 每個$myMax是您的六個元素列表之一,而不是一個單獨的標量值。這就是爲什麼你的比較不起作用,條件從來就不是真的,你試圖比較一個標量和一個數組。你叫什麼$myMax會更恰當地被稱爲$currentRow

這是可以的,因爲PHP有​​一些功能找到一個陣列

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仍然需要他們兩個嵌套的,它不重複一個2維數組元素的元素)

+0

我讀的是關於array_reduce,它將數組減少到一個數字,但不知道如何插入最小最大部分,但這真的解釋了它,謝謝 – 2011-03-17 05:29:00

+0

這是一個棘手的例子。使用它來總結一個數組將是最簡單的介紹。這很奇怪,因爲一個參數是一個標量,另一個是數組,而且我使用了min/max的超載版本。在這裏http://us.php.net/manual/en/function.array-reduce.php – 2011-03-17 05:36:54

1

最大:

<?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; 

?> 

你能弄清楚分鐘:)

+0

更多的簡單的'array_reduce'非常感謝你,我想出了最低分 – 2011-03-17 05:20:51

+0

真棒:)祝你好運剩下的工作。 – 2011-03-17 05:22:40

7

還有一個班輪爲:

$max = max(array_map("max", $multable)); 
+0

也試過這個,它也工作得很好,謝謝! – 2011-03-17 05:27:05

0

對於最小值

echo min(array_map("min", $multable)); 

爲了獲得最大的價值

echo max(array_map("max", $multable)); 
0
$minArray = array(); 
     foreach($arrayVal as $arrI=> $arrK) 
     { 

      if($arrK == min($arrayVal)) 
      { 
       array_push($minArray , $arrayVal); 
      } 
     } 

print_r($minArray); 

在這裏你去:)