Tvister... Przetestowałem kod... brak efektu. Var_dump nawet zmiennej $wyjście nie wyświetla.
Tu jest nieco poprawiona moja wersja.. Na bank działająca i testowana:
foreach($a as $k => $v) {
continue;
} else {
foreach($search AS $tv) {
$sum[ $a[$search[0]] ] += $b[$tv];
}
}
}
}
Dla podanego zestawu var_dump walnie pustą tablicę... -> array(0) { }
Jeśli zwiększysz do
to wyświetli -> array(1) { [4]=> int(17) }
EDIT: Problem sprawia fakt, że array unique wywala wszystkie wartości unikalne. Jeśli masz podwójną 4 to i tak poda w array_unique 4. Tyle że opierając się o samą tablicę nie dowiesz się, która z nich ma więcej niż jedno wystąpienie

Sam to musisz sprawdzić. Optymalizować prosto moją jeszcze można. Zamiast foreach'ować po $a, można po $test, bo ma już te unikalne wartości, ale trzeba by nieco przerobić funkcję

EDIT2: Tu masz wersję lecącą już po kluczach unikatowych

foreach($test as $k => $v) {
if( count($search) > 1
) { foreach($search AS $tv) {
$sum[ $a[ $search[0] ] ] += $b[$tv];
}
}
}
}
EDIT3: Bym zapomniał... W moim przykładzie jest jako klucz wartość dublującej się wartości. Jeśli chcesz indeks pierwszego klucza jaki ją posiada to też żaden problem

Zamień
$sum[ $a[ $search[0] ] ] += $b[$tv];
na
$sum[ $search[0] ] += $b[$tv];