【问题标题】:How to get array key with less than values如何获取小于值的数组键
【发布时间】:2018-01-07 15:25:47
【问题描述】:

我有 2 个数组:

$arr_1=array(200, 300, 200, 200);

$arr_2=array(
    1 => array(70, 90, 70, 20),
    2 => array(115, 150, 115, 35),
    3 => array(205, 250, 195, 55),
    4 => array(325, 420, 325, 95),
    5 => array(545, 700, 545, 155)
);

现在我需要一些方法来获取 $arr_1 中数组的数组键,其中所有值都小于 $arr_2 中的所有值。

在上面的例子中,它必须返回 key 1 AND key 2 from $arr_2 不使用 foreach 循环。

【问题讨论】:

    标签: php arrays dictionary array-filter


    【解决方案1】:

    您可以使用array_filter 过滤元素(它保留键),然后将结果传递给array_keys 以接收键数组。

    此外,您的条件可以这样拼写:“从 $arr_2 返回子数组,其中最大值小于 $arr_1 的最小值。”

    $arr_1=array(200, 300, 200, 200);
    
    $arr_2=array(
        1 => array(70, 90, 70, 20),
        2 => array(115, 150, 115, 35),
        3 => array(205, 250, 195, 55),
        4 => array(325, 420, 325, 95),
        5 => array(545, 700, 545, 155)
    );
    
    $filtered = array_filter($arr_2, function($value) use ($arr_1) {
        return max($value) < min($arr_1);
    });
    $keys = array_keys($filtered);
    
    var_dump($keys);
    

    【讨论】:

      【解决方案2】:

      如果您只想将子数组与$arr_1 中的最小值进行比较,那么最佳实践要求您在输入array_filter() 之前声明该值。这将使函数不必在每次迭代中调用min()。 (Demo)

      $arr_1=[200,300,200,200];
      $arr_2=[
          1=>[70,90,70,20],
          2=>[115,150,115,35],
          3=>[205,250,195,55],
          4=>[325,420,325,95],
          5=>[545,700,545,155]
      ];
      
      $limit=min($arr_1);  // cache this value, so that min() isn't called on each iteration in array_filter()
      $qualifying_keys=array_keys(array_filter($arr_2,function($a)use($limit){return max($a)<$limit;}));
      var_export($qualifying_keys);
      /*
      array(
          0=>1,
          1=>2,
      )
      */
      

      【讨论】:

        猜你喜欢
        • 2021-08-02
        • 2016-12-15
        • 1970-01-01
        • 2020-03-24
        • 1970-01-01
        • 1970-01-01
        • 2020-11-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多