在多维数组中查找最小值并返回键

时间:2017-06-20 18:05:32

标签: php arrays multidimensional-array

我在这里已经阅读了几个类似的问题,例如Finding the minimum value's key in an associative array,但我认为我的问题可能是唯一的,因为我的源数组不是字符串作为键。

我的源数组看起来像这样,

$dealers = array(
    array(
        [id] => 1526,
        [count] => 2
    ),
    array(
        [id] => 1518,
        [count] => 5
    ),
    array(
        [id] => 1511,
        [count] => 9
    ),
    array(
        [id] => 1410,
        [count] => 3
    )
);

我需要获得最小计数值的 id

我尝试了以下内容,

$low_dealer = array_keys($dealers, min($dealers));

但它似乎返回了最低 id 的索引而不计算。

我的下一次尝试是将我找到的另一个函数组合起来找到特定列的最小值

$low_dealer = array_keys($dealers, min( array_column( $dealers, 'count' ) ));

但这没有任何回报。

编辑:还必须能够处理多个分钟,如果两个或多个分钟具有相同的计数,则需要将它们的数组返回以便我可以 rand() it。

感谢您的任何提示,谢谢!

2 个答案:

答案 0 :(得分:1)

$dealersMin = min(array_column($dealers, 'count'));

$dealersWithMinCount = array_filter($dealers, function ($dealer) {
    global $dealersMin;
    return ($dealer['count'] == $dealersMin);
});

var_dump($dealersWithMinCount[array_rand($dealersWithMinCount)]['id']);

eval.in demo

解释

  1. 首先,我们在数组中找到'count'的最低值,并将其保存到$dealersMin
  2. 然后我们需要获取$dealers数组中计数为$dealersMin的所有行,并将其保存在$dealersWithMinCount中。
  3. 然后只选择$dealersWithMinCount {{1}}
  4. 的随机元素

答案 1 :(得分:1)

// indexed array: 2, 5, 9, 3
$counts = array_column($dealers, 'count');

// find index of min value
$index = array_search(min($counts), $counts, true);

// $dealers[$index]['id'];