
1、2週間ぐらい悩みました。
結論から言うと、これに行きついたかどうかに尽きます。
foreach (配列変数 as &変数){
実行する処理1;
実行する処理2;
}
//変数の前に「&」を付けることで要素の値に対する参照を設定することができます。よって変数に対して新しい値を代入することで、要素の値を変更することが可能になります。
引用元:foreach文で配列要素の値を変更する
https://www.javadrive.jp/php/for/index10.html

どうやらforeach内の変数$keyや$valueなどは、
for文のなかの$i, $jなどと同じで、
「その中でしか使えない変数」の模様。
よってキーがだぶっていたら値を足せ、ということをしても
その値が実際の配列に反映されてなかったんですね。
この「&」一文字を足して解決しました。
<?php
// 自分の得意な言語で
// Let's チャレンジ!!
$num = trim(fgets(STDIN));
$hoge = array();
for ($i = 0; $i < $num; $i++) {
$s = explode(" ",trim(fgets(STDIN)));
//echo("s0 s1 ".$s[0].",".$s[1]."\n");
$flag = false;//英文字のだぶりがあるかどうか
foreach($hoge as $key => &$value){//&をつけると反映される
if($s[0]==$key){
$value = $value + $s[1];
$flag = true;
}
}
if($flag==false){
$hoge+=array($s[0]=>$s[1]);
}
}
arsort($hoge);
//print_r($hoge);
//出力
foreach($hoge as $key=>&$value){//なぜだかここにも&が必要になった
echo($key." ".$value."\n");
}
?>
分からないのはこれです。なぜここにも&が必要なのだろう。
//出力
foreach($hoge as $key=>&$value){//なぜだかここにも&が必要になった
echo($key." ".$value."\n");
}
これを入れないとケース3ぐらいが通らなかったです。
この記事の問題はこちら
https://paiza.jp/works/mondai/prob60/problem_index?language_uid=php
paiza Bランクレベルアップメニュー(PHP編)

そしてこれにてBランクレベルアップメニューすべてが通りました。
つまりこの問題が一番大変でした。

3+