<?
$a = array(
array(1,2,3),array(1,3,2),
array(2,1,3),array(2,3,1),
array(3,1,2),array(3,2,1)
);
print_r($a);

foreach($a as &$b){
array_push($b,$b[0]);
}
print_r($a);

foreach($a as $b){
foreach($b as $c){
echo $c;
}
echo '<br/>';
}
?>

1から3までの順列を定義し、さらにその末尾に最初の値を付けた数列を得ようとしています。
しかしこれを実行すると
1231
1321
2132
2312
3123
3123
と何故か最後の1つだけ最後から2番目の数列と同じ値になってしまいます。
foreachで$bを参照にしている影響だと思いますが($bの変数名を変えればうまくいきます)、
どういう原因でこうなるんでしょうか?