$array = array('aaa','bbb','ccc');
foreach($array as &$val){
    if($val=='bbb'){
        $val='kkk';
    }
}

は期待通りにbbbがkkkに置き換わるんですが、処理部分を
unset($val);
にしても消去されないのは何故でしょうか? キーを使わないと消せませんか?