使用array_count_values()并仍然保持密钥 - PHP

Let's say I have two arrays...

$radicand_array = array(3, 5, 5, 2);
$coeff_array = array(-10, 14, 3, -6);

I'd like to be able to determine which (if any) values in $radicand_array match, AND also know what the keys are. So, in this case I would want to know that there's a match on keys 1 and 2 of $radicand_array.

I need to know this because I want to then add the corresponding key values in $coeff_array. So, in this case I would then add 14 and 3 based on the matching 5's in $radicand_array.

I've tried array_count_values(), but it doesn't seem to give the key values like I want. Is there a PHP function ready made for this?

Using the link:

Fixed. Good man!

<?php
    // $radicand_array = array(3, 5, 5, 2);
    $radicand_array = array(3, 5, 5, 2, 3, 3);
    $coeff_array = array(-10, 14, 3, -6);

    $unique = array_unique($radicand_array);
    $duplicates = array_diff_assoc($radicand_array, $unique);

    // Duplicate keys
    $aDupes = array_keys(array_intersect($radicand_array, $duplicates));
    $iSum = 0;
    $iCountDupes = count( $aDupes );
    for( $i = 0; $i < $iCountDupes; ++$i )
    {
        if( !empty( $coeff_array[ $aDupes[ $i ] ] ) )
        {
            $iSum = $iSum + $coeff_array[ $aDupes[ $i ] ];
        }
    }
    var_dump( $iSum );
?>

This is an edited version of Vladimir Ramik's post to handle multiple sets of matches...

$radicand_array = array(3, 5, 5, 2, 3);
$coeff_array = array(-10, 14, 3, -6, 4);

$unique = array_unique($radicand_array);
$duplicates = array_diff_assoc($radicand_array, $unique);

$new_array = array_chunk($duplicates, 1);
// Duplicate keys
$aDupes = array_keys(array_intersect($radicand_array, $new_array[0]));

$iCountDupes = count( $aDupes );
        for($i = 0; $i < $iCountDupes; ++$i){
            $ans_coeff_1 += $coeff_array[$aDupes[ $i ]];
        }

        echo $ans_coeff_1;

// Duplicate keys
$bDupes = array_keys(array_intersect($radicand_array, $new_array[1]));

$iCountDupes = count( $bDupes );
        for($i = 0; $i < $iCountDupes; ++$i){
            $ans_coeff_2 += $coeff_array[$bDupes[ $i ]];
        }

        echo '<br>' . $ans_coeff_2;