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


Use array_count_values() and still keep key -- PHP

假设我有两个数组...

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

我希望能够确定$radicand_array中的哪些(如果有的话)值匹配,并且还知道键是什么。 所以,在这种情况下,我想知道$radicand_array键 1 和 2 上有匹配项。

我需要知道这一点,因为我想在 $coeff_array 中添加相应的键值。 因此,在这种情况下,我会根据匹配的 3 添加 3 和 $radicand_array .

我已经尝试过array_count_values(),但它似乎没有给出我想要的键值。 有没有为此准备好的 PHP 函数?

使用链接:

固定。好人!

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

这是弗拉基米尔·拉米克(Vladimir Ramik)的帖子的编辑版本,用于处理多组比赛...

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