こんにちは、さるまりんです。
こんな配列があります。
$arr = [
'fruits' => ['apple', 'orange', 'banana']
];
fruits
にapple
、orange
、banana
と3つの値が入ってます。
これをPHPのhttp_build_query()に渡すとこんな文字列を返します。
fruits%5B0%5D=apple&fruits%5B1%5D=orange&fruits%5B2%5D=banana
これを↓のようにしたい。
fruits[]=apple&fruits[]=orange&fruits[]=banana
具体的にいうとインデックスの数字なしの角かっこのパラメタ名にしたいということです。
preg_replace()を使って置き換えます。
preg_replace('/\%5B\d+\%5D/', '[]', http_build_query($arr));
fruits[]=apple&fruits[]=orange&fruits[]=banana
やっているのは%5B
を[
、%5D
を]
にして、インデックスの数字をなくしているだけです。
渡す元のデータに[]
が入っていたらどうでしょうか?
$arr = [
'names' => ['panic[wow]star', 'single[red]beam']
];
これを処理するとこうなります。
names[]=panic%5Bwow%5Dstar&names[]=single%5Bred%5Dbeam
文字列の中だけエンコードされていますね。
今度は名前やデータに%5B
や%5D
が含まれていたらどうでしょうか?
$arr = [
'%5B%5D' => ['What is going to happen to %5B and %5D']
];
↑だと↓になります。
%255B%255D[]=What+is+going+to+happen+to+%255B+and+%255D
%
が%25
に変換されているので、内容が失われてしまうことはなさそうです。
%5B
や%5D
のままでもいいこともあるのでしょうが、今回はどうしても[]
にして欲しいというリクエストがあったので色々試してみました。
小さいことですが要求に応えるのは大事なことがありますね。
読んでくださってありがとうございました。
それではまた!