Calculate the highest duplicate integers of two as

2020-04-19 11:20发布

问题:

Given 2 associative arrays:

$fruits  = array ( "d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple" );
$fruits2 = array ( "e" => "lemon", "f" => "apple",  "g" => "melon",  "h" => "apple" );

I would like to do something like:

for ( $n = count($fruits), $i = 0; $i < $n; $i++)
{
  $test = (bool) $fruits[$i] == $fruits2[$i];
}

This can not work as I am using associative array. What would be the best way to go to achieve that? (This loops is going to be ran intensity so I would like to keep it as light as possible)

EDIT to give more detail on what I am trying to do:

Here is a better example of what I am trying to achieve:

$array   = array ( 1,2,3,4,3,2 );
$array2  = array ( 9,6,3,4,3,2 );
$counts  = array_count_values( $words );
$counts2 = array_count_values( $words2 );

Given the arrays above I need to calculate which array as the highest duplicate integers. Imagine a poker game, comparing two hands that each contain duplicate cards, how to evaluate which set of duplicate (whether double, triple or quadruple ) as the highest value.

回答1:

Use array array_values ( array $input ) function and compare them.

 $value1=array_values($fruits);
 $value2=array_values($fruits2);

 for ( $i = 0; $i < count($value1); $i++)
 {
   $test[] = $value1[$i] == $value2[$i] ? TRUE : FLASE;
 }


回答2:

Got it working this way :

$n = count($fruits);
for ( $i = 0; $i < $n; $i++)
{
  $cur_vals_1 = each ($fruits);
  $cur_vals_2 = each ($fruits2);

  $sum1 += $cur_vals_1['key'] * $cur_vals_1['value'];

  ...
}


回答3:

You're probably chasing the wrong solution. To find the highest duplicate in an array I'd use this (PHP 5.3+ syntax):

max(array_keys(array_filter(array_count_values($array), function ($i) { return $i >= 2; })))

Do this for both arrays and compare which result is higher. Trying to compare both against each other at the same time is too convoluted.



回答4:

You don't need the ternary operator.
Also, be careful with count() as it will fail if your array is null.
They also need to be equal lengths or you'll get an error.

if( is_array($value1)  && is_array($value2) && count($value1)==count($value2) ) {
    for ( $i = 0; $i < count($value1); $i++)
    {
        $test[] = ($value1[$i] == $value2[$i]);
    }
}


标签: php arrays