如何从数组中随机获取最小值?
Posted
技术标签:
【中文标题】如何从数组中随机获取最小值?【英文标题】:How to randomly get min value from Array? 【发布时间】:2020-08-07 17:09:32 【问题描述】:我有一个具有多个相似最小值的数组。 我可以知道如何随机获取最小值之一吗?
这是我的示例代码:-
$aryNo = array(
0 => 34, 1 => 34, 2 => 51, 3 => 12, 4 => 12,
5 => 12, 6 => 56, 7 => 876, 8 => 453, 9 => 43,
10 => 12
);
$b = array_keys($aryNo, min($aryNo)); //Here only can get 1 value.
$intNo = $b[0];
我可以知道如何获取最小值列表 (3 => 12, 4 => 12,5 => 12,10 => 12) 并随机选择其中一个以便我可以在 $intNo 中设置吗?
【问题讨论】:
如果你需要一个值,那么选择子数组有什么意义呢? @u_mulder,我只需要从最小值列表中选择 1 个。 $aryNo 可能只有 1 个最小值或多个最小值。有什么想法吗?array_rand
或 shuffle
您好 u_mulder,感谢您的建议。但是在这种情况下,如何将 array_rand / shuffle 同时应用于(键和值)?
【参考方案1】:
$aryNo = array(
0 => 34, 1 => 34, 2 => 51, 3 => 12, 4 => 12,
5 => 12, 6 => 56, 7 => 876, 8 => 453, 9 => 43,
10 => 12
);
$b = array_keys($aryNo, min($aryNo)); //Here only can get 1 value.
// Taking a random KEY from $b
$key = array_rand($b);
// Taking a KEY from $aryNo which is under `$key`
echo $b[$key];
// Taking a VALUE from `$aryNo` which is under `$b[$key]`
echo $aryNo[$b[$key]];
The fiddle.
【讨论】:
感谢 u_mulder 的回答,我发现如果我使用 shuffle();也适用于我的情况。谢谢!【参考方案2】:试试这样的:
$aryNo = [34,34,34,51,12,12,12,56,876,453,43,12];
foreach($aryNo as $a)
$finalArray[$a][] = $a;
print("<pre>".print_r($finalArray,true)."</pre>");
$minKey = min(array_keys($finalArray));
print("<pre>".print_r($finalArray[$minKey],true)."</pre>");
$randIndex = array_rand($finalArray[$minKey]);
print_r("Key: ".$randIndex.", ".$finalArray[$minKey][$randIndex]);
第一次打印:
Array
(
[34] => Array
(
[0] => 34
[1] => 34
[2] => 34
)
[51] => Array
(
[0] => 51
)
[12] => Array
(
[0] => 12
[1] => 12
[2] => 12
[3] => 12
)
[56] => Array
(
[0] => 56
)
[876] => Array
(
[0] => 876
)
[453] => Array
(
[0] => 453
)
[43] => Array
(
[0] => 43
)
)
比你选择 min 键,然后打印这个:
Array
(
[0] => 12
[1] => 12
[2] => 12
[3] => 12
)
最后你从这个数组中选择随机键并打印值:
Key: 2, Value: 12
【讨论】:
嗨@JureW,感谢您的回答。但我的情况是考虑多维数组。像上面的例子一样,我需要从列表中获取键是 3 或 4 或 5 或 10(因为它们都有最大值 12)但不是 [0] / [1] / [2] / [3]。我可以知道我该怎么做吗?【参考方案3】:`<?php
$sortArr = array();
$aryNo = array(0 => 34, 1 => 34, 2 => 51, 3 => 12, 4 => 12,5 =>
12, 6 => 56, 7 => 876, 8 => 453, 9 => 43,10 => 12);
asort($aryNo);
$aryNo = array_values($aryNo);
print_r($aryNo);
echo $aryNo[0];
?>`
【讨论】:
嗨 V77,我的情况是如何从最大值数组中获取多个键。从您的示例中,只会返回最大值。因此,您的回答不适合我的情况。【参考方案4】:我发现如果我使用 shuffle();也为我工作。 这是我的例子:-
$aryNo = array(
0 => 34, 1 => 34, 2 => 51, 3 => 12, 4 => 12,
5 => 12, 6 => 56, 7 => 876, 8 => 453, 9 => 43,
10 => 12
);
$aryNo2 = array_keys($aryNo, min($aryNo));
shuffle($aryNo2); //
$intWinNo = $aryNo2[0];
感谢@u_mulder 的建议和回答。
【讨论】:
以上是关于如何从数组中随机获取最小值?的主要内容,如果未能解决你的问题,请参考以下文章