當前位置: 首頁> 最新文章列表> PHP中max()函數和多維數組嵌套使用有哪些技巧?怎麼實現?

PHP中max()函數和多維數組嵌套使用有哪些技巧?怎麼實現?

gitbox 2025-06-16

1. 基本的max()函數使用

首先,我們回顧一下max()函數的基本用法。它可以接收一個數組或一組單獨的數值作為參數,返回其中的最大值。例如:

 <span><span><span class="hljs-variable">$values</span></span><span> = [</span><span><span class="hljs-number">10</span></span><span>, </span><span><span class="hljs-number">20</span></span><span>, </span><span><span class="hljs-number">30</span></span><span>, </span><span><span class="hljs-number">40</span></span><span>, </span><span><span class="hljs-number">50</span></span><span>];
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">max</span></span><span>(</span><span><span class="hljs-variable">$values</span></span><span>);  </span><span><span class="hljs-comment">// 輸出 50</span></span><span>
</span></span>

這個函數也支持多個參數傳遞,每個參數會被當作一個單獨的值進行比較。例如:

 <span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">max</span></span><span>(</span><span><span class="hljs-number">10</span></span><span>, </span><span><span class="hljs-number">20</span></span><span>, </span><span><span class="hljs-number">30</span></span><span>, </span><span><span class="hljs-number">40</span></span><span>, </span><span><span class="hljs-number">50</span></span><span>);  </span><span><span class="hljs-comment">// 輸出 50</span></span><span>
</span></span>

對於簡單的數組結構來說, max()函數使用起來非常直接。但當數組變得更複雜,特別是多維數組時,情況就會有所不同。


2. 多維數組中的max()函數使用

在多維數組中, max()函數默認只能處理最外層的數組元素。如果我們希望在多維數組內部找到最大值,則需要藉助一些額外的處理方法。以下是幾種常見的技巧。

2.1 使用array_map和max結合

假設我們有一個多維數組,數組的每個子數組都包含了一些數字。如果我們想要獲取每個子數組中的最大值,可以先通過array_map()函數將每個子數組應用max() ,然後再使用max()找到最大的值。示例如下:

 <span><span><span class="hljs-variable">$array</span></span><span> = [
    [</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>],
    [</span><span><span class="hljs-number">4</span></span><span>, </span><span><span class="hljs-number">5</span></span><span>, </span><span><span class="hljs-number">6</span></span><span>],
    [</span><span><span class="hljs-number">7</span></span><span>, </span><span><span class="hljs-number">8</span></span><span>, </span><span><span class="hljs-number">9</span></span><span>]
];

</span><span><span class="hljs-comment">// 獲取每個子數組的最大值</span></span><span>
</span><span><span class="hljs-variable">$max_values</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_map</span></span><span>(</span><span><span class="hljs-string">'max'</span></span><span>, </span><span><span class="hljs-variable">$array</span></span><span>);

</span><span><span class="hljs-comment">// 輸出每个子数组的最大值</span></span><span>
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$max_values</span></span><span>);  </span><span><span class="hljs-comment">// 輸出 [3, 6, 9]</span></span><span>

</span><span><span class="hljs-comment">// 獲取最大值</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">max</span></span><span>(</span><span><span class="hljs-variable">$max_values</span></span><span>);  </span><span><span class="hljs-comment">// 輸出 9</span></span><span>
</span></span>

在這個例子中, array_map('max', $array)會應用max()函數到每個子數組上,得到每個子數組中的最大值。然後,再用max()函數獲取這些最大值中的最大值。

2.2 使用array_column和max結合

有時候,多維數組中的數據是關聯數組,每個子數組中有一個特定的鍵(如“score”),我們只想在某個特定鍵的值中找到最大值。在這種情況下, array_column()非常有用。它可以提取多維數組中所有子數組的某個指定列,然後與max()函數結合使用。示例如下:

 <span><span><span class="hljs-variable">$array</span></span><span> = [
    [</span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Alice'</span></span><span>, </span><span><span class="hljs-string">'score'</span></span><span> =&gt; </span><span><span class="hljs-number">85</span></span><span>],
    [</span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Bob'</span></span><span>, </span><span><span class="hljs-string">'score'</span></span><span> =&gt; </span><span><span class="hljs-number">90</span></span><span>],
    [</span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Charlie'</span></span><span>, </span><span><span class="hljs-string">'score'</span></span><span> =&gt; </span><span><span class="hljs-number">92</span></span><span>]
];

</span><span><span class="hljs-comment">// 提取所有學生的score值</span></span><span>
</span><span><span class="hljs-variable">$scores</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_column</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>, </span><span><span class="hljs-string">'score'</span></span><span>);

</span><span><span class="hljs-comment">// 輸出所有学生的分数</span></span><span>
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$scores</span></span><span>);  </span><span><span class="hljs-comment">// 輸出 [85, 90, 92]</span></span><span>

</span><span><span class="hljs-comment">// 獲取最大分數</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">max</span></span><span>(</span><span><span class="hljs-variable">$scores</span></span><span>);  </span><span><span class="hljs-comment">// 輸出 92</span></span><span>
</span></span>

在這個例子中, array_column($array, 'score')提取了所有學生的分數,然後用max()函數找到最大分數。

2.3 嵌套多維數組的最大值

如果數組的嵌套層次更深,我們可以使用遞歸的方法來處理。遞歸函數可以用來遍歷多維數組並找到最大值。以下是一個遞歸方法的示例:

 <span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">getMaxValue</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$array</span></span></span><span>) {
    </span><span><span class="hljs-variable">$max</span></span><span> = PHP_INT_MIN;  </span><span><span class="hljs-comment">// 設置一個初始值</span></span><span>

    </span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$array</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$value</span></span><span>) {
        </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_array</span></span><span>(</span><span><span class="hljs-variable">$value</span></span><span>)) {
            </span><span><span class="hljs-comment">// 如果值是一個數組,則遞歸調用</span></span><span>
            </span><span><span class="hljs-variable">$max</span></span><span> = </span><span><span class="hljs-title function_ invoke__">max</span></span><span>(</span><span><span class="hljs-variable">$max</span></span><span>, </span><span><span class="hljs-title function_ invoke__">getMaxValue</span></span><span>(</span><span><span class="hljs-variable">$value</span></span><span>));
        } </span><span><span class="hljs-keyword">else</span></span><span> {
            </span><span><span class="hljs-comment">// 否則直接與當前最大值比較</span></span><span>
            </span><span><span class="hljs-variable">$max</span></span><span> = </span><span><span class="hljs-title function_ invoke__">max</span></span><span>(</span><span><span class="hljs-variable">$max</span></span><span>, </span><span><span class="hljs-variable">$value</span></span><span>);
        }
    }

    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$max</span></span><span>;
}

</span><span><span class="hljs-variable">$array</span></span><span> = [
    [</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>, [</span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-number">4</span></span><span>]],
    [</span><span><span class="hljs-number">5</span></span><span>, </span><span><span class="hljs-number">6</span></span><span>, [</span><span><span class="hljs-number">7</span></span><span>, </span><span><span class="hljs-number">8</span></span><span>]],
    </span><span><span class="hljs-number">9</span></span><span>
];

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">getMaxValue</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>);  </span><span><span class="hljs-comment">// 輸出 9</span></span><span>
</span></span>

此方法通過遞歸遍歷數組的每一層,如果當前值是數組,則進入下一層繼續比較;如果是數值,則與當前最大值進行比較。最終返回整個多維數組中的最大值。