【问题标题】:Find min value in multidimensional array and return key在多维数组中查找最小值并返回键
【发布时间】:2017-11-23 09:58:37
【问题描述】:

我在这里阅读了几个类似的问题,例如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
    )
);

我需要得到最小count值的id

我已经尝试了以下,

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

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

我的下一个尝试是结合我发现的另一个函数来查找特定列的最小值,

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

但这没有任何回报。

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

在此不胜感激,谢谢!

【问题讨论】:

    标签: php arrays multidimensional-array


    【解决方案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. 然后只需选择$dealersWithMinCountarray_rand() 的随机元素

    【讨论】:

    • 添加了对问题的编辑,如果两个或多个具有最小值,如何处理?
    • 认为我遵循这一点,谢谢。尽管在 var_dump 行上给我一个未定义的索引...
    • @thatryan 哦,这很奇怪,$dealers 数组与您在问题中发布的数组不同吗?我在 eval.in 中尝试过,效果很好...除非$dealers 数组为空,在这种情况下,您需要在使用最后一行之前添加检查:)
    • 很奇怪。没有相同的数组,只是不同的变量名称$all_dealers(我只是将其缩短到此处发布)并且它不是空的,因为$dealersMin 填充了2,就像它应该的那样。
    • 不,我去吃午饭哈,回去调试:)
    【解决方案2】:
    // 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'];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-21
      • 2016-05-29
      • 1970-01-01
      • 1970-01-01
      • 2016-01-31
      相关资源
      最近更新 更多