php - php - 獲取數組中的最小值並包含重複項

136 2

假設你擁有此數組:


$users = [


 'a' => 2,


 'b' => 1,


 'c' => 1,


 'd' => 3


];



我需要獲得具有最小值的key。所以,在這種情況下是bc

現在這樣做:


asort($users);



$lowestValue = array_values($users)[0];



foreach ($users as $k => $v)


 if ($v == $lowestValue)


 $lowestUsers[$k] = $v;



print_r($lowestUsers);



這樣可以正常工作,但是有更短/更有效的方法嗎?

时间: 原作者:

79 5

你可以使用array_keys查找數組中值最小的key,將array_keys作為第二個參數傳遞,它會返回數組中有該值的所有鍵的數組,注意,使用min可能是獲得最小值的最簡單方法:


$lowestValue = min($users);


print_r(array_keys($users, $lowestValue));



輸出:


Array (


 [0] => b


 [1] => c 


)



3v4l.org的演示

如果實際上希望$users數組的元素具有最低值,可以採取array_keys的輸出,並且通過array_intersect_key運行:


$lowestValue = min($users);


$lowestValueKeys = array_keys($users, $lowestValue);


$lowestUsers = array_intersect_key($users, array_flip($lowestValueKeys));


print_r($lowestUsers);



如果是這樣,只使用array_filter就更簡單了:


$lowestValue = min($users);


$lowestUsers = array_filter($users, function ($v) use ($lowestValue) { return $v === $lowestValue; });


print_r($lowestUsers);



兩種情況下的輸出是


Array (


 [b] => 1


 [c] => 1 


)



關於3v4l.org的演示

原作者:
76 1

你可以通過array_keys和min的組合來做到這一點。不需要進行排序或循環


print_r(array_keys($users, min($users)));



輸出


Array


(


 [0] => b


 [1] => c


)



工作演示 。

原作者:
137 2

這個可以幫助你。


$users = [


 'a' => 2,


 'b' => 1,


 'c' => 1,


 'd' => 3


];



echo array_search(min($users ), $users );



原作者:
52 3

可以使用min()函數查找數組中的最小值,也可以使用array_filter()函數來篩選數據,例如:


$users = [


 'a' => 2,


 'b' => 1,


 'c' => 1,


 'd' => 3


];



$lowest = min($users);



$result = array_filter($users, function($value, $key) use ($lowest) {


 return $value === $lowest;


}, ARRAY_FILTER_USE_BOTH);



結果:

Array ( [b] = > 1 [c] = > 1 )

原作者:
122 0

你有更多選項:

  • 使用min()獲取最小值和獲取相關鍵的array_keys($users, $minvalue) (包括重複項)
  • 使用asort($users)對數組進行排序,並使用$users[0]獲取最小值(不顯示重複項),
原作者:
...