在数组中进行比较:如果存在两个最高值,则比较另一个值

时间:2015-05-11 04:07:46

标签: php arrays

假设我有一个像:

这样的数组
array( [0] => array([item]=>apple [buy]=>50 [sell]=>30)
       [1] => array([item]=>lemon [buy]=>50 [sell]=>60)
       [2] => array([item]=>banana [buy]=>40 [sell]=>20)
       [3] => array([item]=>orange [buy]=>20 [sell]=>30)
     )

目前我正在使用此脚本来检查哪个项目的买家最多

function getMax($array, $val)
{
   $max = 0;
   foreach( $array as $k => $v )
   {
      $max = max( array( $max, $v[$val] ) );
   }
   return $max;
}
$highestBuy = getMax($thisArray, 'buy');

foreach($thisArray as $i=>element){
    if($element['buy'] == $highestBuy){
        $thisArray[$i]['highestBuy'] = 'yes';
    } else {
        $thisArray[$i]['highestBuy'] = 'no';
    }
}

在这种情况下,applelemon都有highestBuyyes值。但是现在我想通过检查sell是否有两个或更多highestBuy的相同值来找出哪个项目最受欢迎。这是产生输出的最简单或最快的方法,如:

array([0] => array([item]=>apple [buy]=>50 [sell]=>30 [mostPopular]=>no)
      [1] => array([item]=>lemon [buy]=>50 [sell]=>60 [mostPopular]=>yes)
      [2] => array([item]=>banana [buy]=>40 [sell]=>20 [mostPopular]=>no)
      [3] => array([item]=>orange [buy]=>20 [sell]=>30 [mostPopular]=>no)
     )

提前致谢。

编辑:

我想做的是:

  1. 找出最高buy
  2. 如果此值仅出现一次(表示数组中有一个最高buy),则将[mostPouplar]=>yes推入数组
  3. 如果不是(有两个或更多相同的最高值),那么找出最高sell
  4. 这意味着如果最高值是唯一的,它将停止进一步行动。如果没有,它将继续在数组中找到次要的最高值。是否有可能实现这一目标?

2 个答案:

答案 0 :(得分:2)

使用您的规则对数组进行排序并获取第一个元素

$array = array( '0' => array('item'=>apple, 'buy'=>50 ,'sell'=>30),
       '1' => array('item'=>lemon, 'buy'=>50, 'sell'=>60),
       '2' => array('item'=>banana, 'buy'=>40, 'sell'=>20),
       '3' => array('item'=>orange, 'buy'=>20 ,'sell'=>30)
     );     

usort($array,
    function($a, $b) {
       $res = $b['buy'] - $a['buy'];
       if (!$res) $res = $b['sell'] - $a['sell'];
       return $res; });

结果:

Array (
[0] => Array ( [item] => lemon [buy] => 50 [sell] => 60 )
[1] => Array ( [item] => apple [buy] => 50 [sell] => 30 )
[2] => Array ( [item] => banana [buy] => 40 [sell] => 20 )
[3] => Array ( [item] => orange [buy] => 20 [sell] => 30 ) )

答案 1 :(得分:0)

我更改了function getMax($array, $val, $val2) { $max_item = 0; foreach( $array as $k => $v ) { if($array[$max_item][$val] <= $v[$val] && $array[$max_item][$val2] <= $v[$val2]) $max_item = $k; } return $max_item; } $highestBuy = getMax($thisArray, 'buy', 'sell'); foreach($thisArray as $i => $element){ $thisArray[$i]['mostPopular'] = ($i == $highestBuy) ? 'yes' : 'no'; } 以返回最受欢迎项目的索引

{{1}}