PHP Conference Japan 2024

min

(PHP 4, PHP 5, PHP 7, PHP 8)

min尋找最小值

說明

min(混合 $value, 混合 ...$values): 混合

替代簽章(不支援具名引數)

min(陣列 $value_array): 混合

如果第一個也是唯一的參數是一個陣列,min() 會回傳該陣列中的最小值。如果提供了至少兩個參數,min() 會回傳這些值中最小的值。

注意事項:

不同類型的值將使用標準比較規則進行比較。例如,非數字的字串會與整數進行比較,就好像它是0一樣,但多個非數字的字串值將按字母數字順序進行比較。實際返回的值將是原始類型,不進行任何轉換。

注意

傳遞不同類型的參數時要小心,因為min()可能會產生不可預測的結果。

參數

value

任何可比較的值。

values

任何可比較的值。

value_array

包含值的陣列。

返回值

min() 會根據標準比較返回被視為「最小」的參數值。如果多個不同類型的值評估為相等(例如 0'abc'),則會返回提供給函數的第一個值。

錯誤/例外

如果傳遞空陣列,min() 會擲出 ValueError

更新日誌

版本 說明
8.0.0 min() 現在在失敗時會擲出 ValueError;先前會返回 false 並發出 E_WARNING 錯誤。
8.0.0 由於字串與數字的比較已更改,因此在這些情況下,min() 不再根據參數順序返回不同的值。

範例

範例 #1 min() 的使用範例

<?php
echo min(2, 3, 1, 6, 7); // 1
echo min(array(2, 4, 5)); // 2

// Here we are comparing -1 < 0, so -1 is the lowest value
echo min('hello', -1); // -1

// With multiple arrays of different lengths, min returns the shortest
$val = min(array(2, 2, 2), array(1, 1, 1, 1)); // array(2, 2, 2)

// Multiple arrays of the same length are compared from left to right
// so in our example: 2 == 2, but 4 < 5
$val = min(array(2, 4, 8), array(2, 5, 1)); // array(2, 4, 8)

// If both an array and non-array are given, the array is never returned
// as comparisons treat arrays as greater than any other value
$val = min('string', array(2, 5, 7), 42); // string

// If one argument is NULL or a boolean, it will be compared against
// other values using the rules FALSE < TRUE and NULL == FALSE regardless of the
// other types involved
// In the below examples, both -10 and 10 are treated as TRUE in the comparison
$val = min(-10, FALSE, 10); // FALSE
$val = min(-10, NULL, 10); // NULL

// 0, on the other hand, is treated as FALSE, so is "lower than" TRUE
$val = min(0, TRUE); // 0
?>

另請參閱

  • max() - 尋找最大值
  • count() - 計算陣列或可數物件中的所有元素

新增註解

使用者貢獻的註解 12 則註解

volch5 at gmail dot com
10 年前
在 DateTime 物件上使用 min()(和 max())會像比較日期(包含時區資訊)一樣比較它們,並返回 DateTime 物件。
<?php
$dt1
= new DateTime('2014-05-07 18:53', new DateTimeZone('Europe/Kiev'));
$dt2 = new DateTime('2014-05-07 16:53', new DateTimeZone('UTC'));
echo
max($dt1,$dt2)->format(DateTime::RFC3339) . PHP_EOL; // 2014-05-07T16:53:00+00:00
echo min($dt1,$dt2)->format(DateTime::RFC3339) . PHP_EOL; // 2014-05-07T18:53:00+03:00
?>

它至少在 5.3.3-7+squeeze17 版本可以運作
匿名
18 年前
絕對不要對布林變數使用這個函式!!!
否則你會得到像這樣的結果:min(true, 1, -2) == true;

只是因為
min(true, 1, -2) == min(min(true,1), -2) == min(true, -2) == true;

你已被警告!
harmor
16 年前
一種將整數限制在兩個值之間的方法是

function bound($x, $min, $max)
{
return min(max($x, $min), $max);
}

這與以下程式碼相同

$tmp = $x;
if($tmp < $min)
{
$tmp = $min;
}
if($tmp > $max)
{
$tmp = $max;
}
$y = $tmp;

所以如果你想將一個整數限制在 1 和 12 之間,例如

輸入
$x = 0;
echo bound(0, 1, 12).'<br />';
$x = 1;
echo bound($x, 1, 12).'<br />';
$x = 6;
echo bound($x, 1, 12).'<br />';
$x = 12;
echo bound($x, 1, 12).'<br />';
$x = 13;
echo bound($x, 1, 12).'<br />';

輸出
1
1
6
12
12
steffen at morkland dot com
18 年前
> 絕對不要對布林變數使用這個函式!!!
> 否則你會得到像這樣的結果:min(true, 1, -2) == true;

> 只是因為
> min(true, 1, -2) == min(min(true,1), -2) == min(true, -2) == true;

可以使用布林值,但有一件事需要注意,當使用非嚴格比較 (==) 評估時,任何不是布林值 false、0 或 NULL 的值都被視為 true,例如:
(5 == true) = true;
(0 == true) = false;
true 實際上也是除了 0、false 和 null 之外的任何值。然而,當 true 轉換為字串或整數時,true == 1,因此排序時 true = 1。但如果 true 是最大數,則返回布林值 true。因此,為了確保只在 true 是最大數時才匹配,請記住使用嚴格比較運算子 ===
Teelevision
11 年前
一個會回傳不為 0 的最小整數的函式。
<?php
/* 類似 min(),但會轉型成整數並忽略 0 */
function min_not_null(Array $values) {
return
min(array_diff(array_map('intval', $values), array(0)));
}
?>
DO
16 年前
我修改了無錯誤的 min 版本,使其忽略 NULL 值(否則它會回傳 0)。

<?php
function min_mod () {
$args = func_get_args();

if (!
count($args[0])) return false;
else {
$min = false;
foreach (
$args[0] AS $value) {
if (
is_numeric($value)) {
$curval = floatval($value);
if (
$curval < $min || $min === false) $min = $curval;
}
}
}

return
$min;
}
?>
piotr_sobolewski at o2 dot nospampleasenono dot pl
17 年前
當你的陣列同時包含字串和數字時要非常小心。這段程式碼的運作方式很奇怪(儘管可以解釋)。
var_dump(max('25.1.1', '222', '99'));
var_dump(max('2.1.1', '222', '99'));
hava82 at gmail dot com
13 年前
這裡有個函式可以透過陣列鍵值找到最小值

<?php
function min_by_key($arr, $key){
$min = array();
foreach (
$arr as $val) {
if (!isset(
$val[$key]) and is_array($val)) {
$min2 = min_by_key($val, $key);
$min[$min2] = 1;
} elseif (!isset(
$val[$key]) and !is_array($val)) {
return
false;
} elseif (isset(
$val[$key])) {
$min[$val[$key]] = 1;
}
}
return
min( array_keys($min) );
}
?>
matt at borjawebs dot com
14 年前
一個簡潔的版本(和可能的應用),用於返回包含相同最小值的陣列鍵陣列

<?php
// 資料
$min_keys = array();
$player_score_totals = array(
'player1' => 300,
'player2' => 301,
'player3' => 302,
'player4' => 301,
...
);

// 搜尋具有 min() 值的陣列鍵
foreach($player_score_totals as $playerid => $score)
if(
$score == min($player_score_totals)) array_push($min_keys, $playerid);

print_r($min_keys);
?>
php at keith tyler dot com
14 年前
如果 NAN 是 min() 的第一個參數,則始終會返回第二個參數。

如果 NAN 是第二個參數,則始終會返回 NAN。

max() 的關係相同,但相反。

<?php
// 為簡潔起見,省略了 \n
print max(0,NAN);
print
max(NAN,0);
print
min(0,NAN);
print
min(NAN,0);
?>

返回
0
NAN
NAN
0
8ilO
7 年前
一個 min_by 函式
<?php
function min_by(Array $arr, Callable $func){
$mapped = array_map($func, $arr);
return
$arr[array_search(min($mapped), $mapped)];
}
$a = ["albatross", "dog", "horse"];
echo
min_by($a, "strlen"); // dog
?>
nonick AT 8027 DOT org
20 年前
我用 max() 測試過,但我認為這也適用於 min():如果您正在處理數字,則可以使用

$a = ($b < $c) ? $b : $c;

這比

$a = min($b, $c);

稍微快一些(大約 16%)。我在超過一百萬次迭代的整數和浮點數上測試了幾個迴圈。

我正在將 PHP 4.3.1 作為 Apache 1.3.27 的模組運行。
To Top