在数组中进行比较:如果存在两个最高值,则比较其他值。

3
假设我有一个数组如下所示:
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. 找到最高的“买”价值 2. 如果这个值只出现一次(这意味着数组中只有一个最高的“买”价值),则将“[mostPouplar]= >yes”推入数组 3. 如果不是(存在两个或更多相同的最高值),则找到最高的“卖”价值。
这意味着如果最高值是唯一的,则会停止进行进一步的操作。 如果不是,则会继续查找数组中的次要最高值。 是否可能实现这一点?
2个回答

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 ) )

0

我已经修改了getMax()方法,使其返回最受欢迎的项目的索引。

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';
}

你的代码似乎出了点问题。它返回 banana 作为最受欢迎的结果。或者是我错过了什么?示例在这里 - user3571945

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接