Comparison in an array: if the two highest values ​​exist, compare the other value

Suppose I have an array like:

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

      

I am currently using this script to check which item has the highest buyer

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

      

In this case the two apple

and lemon

will have the value of highestBuy

a yes

. But now I want to find out which item is the most popular by checking them sell

if there are two or more of the same values highestBuy

. What's the easiest or fastest way to make a conclusion as follows:

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

      

Thanks in advance.

EDIT:

What I want to do:

  • find out the highest buy

  • If this value happens only once (it means there is one high in the array buy

    ) then push [mostPouplar]=>yes

    into the array
  • If not (there are two or more of the same highest value) then find the highest sell

    .

This means that if the highest value is unique, it will stop taking further action. If not, it will keep looking for the secondary highest value in the array. Can this be achieved?

+3


source to share


2 answers


Sort the array with your rules and take the first element

$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; });

      



result:

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

      

+2


source


I changed getMax()

to return the index of the most popular item



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

      

0


source







All Articles