◆ 連想配列 の値だけ欲しいってときだけではないんです
◆ unique や filter などで間が抜けてしまった配列の隙間を詰めたいときに使えます 

php の array_values って意外と役立つものでした

array_values

array_values って配列を引数にして渡すと 配列のすべての要素を配列で返すというものです
なにいってんの? と思いますよね
基本的には そのまま同じ値が返って来ます

コピーされてるわけですけど php の配列は参照じゃなくて実体で扱うので代入すると全コピーされてます(CoWつきで)
だからやっぱり使う機会がないです

キーが0からの連番の数値になってるので連想配列からただの配列にしたいときに使えますけどそういう機会もめったにないです

なので いらない関数だと思ってたのですが 必要な時がありました

キーが保持される

array_filter で奇数を取り出してみます
>>> array_filter([1,2,3,4], function($e){return $e%2;})
=> [
0 => 1,
2 => 3,
]

配列の diff 取ってみます
>>> array_diff([1,2,3,4,5,6,7,8],[2,3,5,7])
=> [
0 => 1,
3 => 4,
5 => 6,
7 => 8,
]

つぎは unique してみます
>>> array_unique([1,2,3,2,3,4,5,4,3,2,1,2,1,7,8,9,10,0])
=> [
0 => 1,
1 => 2,
2 => 3,
5 => 4,
6 => 5,
13 => 7,
14 => 8,
15 => 9,
16 => 10,
17 => 0,
]


ところで普通の配列は
>>> array_merge([1,2,3], [4,5,6])
=> [
1,
2,
3,
4,
5,
6,
]

こうです

うえのやつらは キーがついてますね
unique とか filter で要素が消えると そこが抜けてしまうだけで間が詰められません

json_encode すると
>>> json_encode(array_unique([1,2,3,2,3,4]))
=> "{"0":1,"1":2,"2":3,"5":4}"
>>> json_encode([1,2,3,4,5,6])
=> "[1,2,3,4,5,6]"
配列じゃなくてオブジェクトになっています

JavaScript で受け取るときにこれは困りますし unique などしたあとに前の添字なんていらないです
php は配列も連想配列なのでそういう処理なんでしょうが 使う側としては抜けたところは詰めたいです

そこで array_values!

そういうときに array_values です
>>> json_encode(array_values(array_unique([1,2,3,2,3,4])))
=> "[1,2,3,4]"

JavaScript だと 配列の空きを詰めたい時に filter してるので filter で抜けができるならどうするのかと困っていたのですが php で配列の間詰めたいなら array_values を使うものと知ったので驚きでした

こんな使い方するんですねー

json化して JavaScript に渡す php を書くなら覚えておいたほうが良い使い方です