【问题标题】:get only 5 elements from array从数组中仅获取 5 个元素
【发布时间】:2009-07-25 12:53:23
【问题描述】:

我的数组设置如下:

array
  'testuri/abc' => 
    array
      'label' => string 'abc' (length=3)
      'weight' => float 5
  'testuri/abd' => 
    array
      'label' => string 'abd' (length=3)
      'weight' => float 2
  'testuri/dess' => 
    array
      'label' => string 'dess' (length=4)
      'weight' => float 2
  'testuri/gdm' => 
    array
      'label' => string 'gdm' (length=3)
      'weight' => float 2
  'testuri/abe' => 
    array
      'label' => string 'abe' (length=3)
      'weight' => float 2
  'testuri/esy' => 
    array
      'label' => string 'esy' (length=3)
      'weight' => float 2
  'testuri/rdx' => 
    array
      'label' => string 'rdx' (length=3)
      'weight' => float 3
  'testuri/tfc' => 
    array
      'label' => string 'tfc' (length=3)
      'weight' => float 3

我想获取/过滤具有大“权重”的 5 个元素。有没有一个php函数可以做到这一点?

附言。我的想法是使用 foreach

【问题讨论】:

    标签: php arrays filter


    【解决方案1】:

    将数组按权重值降序排列,然后得到前五个值:

    function cmpByWeight($a, $b) {
        return $b['weight'] - $a['weight'];
    }
    uasort($array, 'cmpByWeight');
    $firstFive = array_slice($array, 0, 5);
    

    【讨论】:

    • usor 不会保留数组键
    【解决方案2】:

    您最好使用uasort 与比较传递值的“权重”索引的回调,然后使用array_slice 来获取前5 个元素(或最后5 个元素,具体取决于您的排序方式.. .)

    【讨论】:

    • 我不会对整个数组进行排序。这具有 O(nlog n) 的复杂性,使用堆或 top5 元素的简单列表它下降到 O(klog n) 或 O(k*n)
    【解决方案3】:

    据我所知没有。

    您可以为此使用 heap,但对于仅 5 个元素,我不确定它是否比仅存储前 5 个元素更快。

    【讨论】:

      【解决方案4】:

      我会使用 array_multisort() 然后获取前 5 个值。

      array_multisort($weight, SORT_DESC, $label, SORT_ASC, $YOUR_ARRAY)

      然后只需获取 $YOUR_ARRAY[0] - $YOUR_ARRAY[4] 或遍历数组以获取前 5 个

      [EDIT] 这是函数的链接 --> http://us3.php.net/manual/en/function.array-multisort.php

      【讨论】:

        【解决方案5】:

        我的英语不是最好的,我会尽力解释,我需要什么。我可以对数组进行排序....但在上面的示例中,我有以下内容:

        1x weight 5
        2x weight 3
        5x weight 2
        

        所以...如果我抓住前 5 个元素,另外 3 个重量为 2 的元素将被忽略。所以我需要所有 5 个重量为 2 的元素......所以我有一个包含 7 个项目的数组。

        另一个例子:

        2x weight 5
        4x weight 2
        7x weight 1
        

        必须忽略所有带有 weight1 的元素,所以我在一个新数组中得到 6 个元素..

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-12-08
          • 2016-04-01
          • 2012-03-31
          • 2019-05-21
          • 1970-01-01
          • 2014-10-17
          • 1970-01-01
          • 2020-03-11
          相关资源
          最近更新 更多