事象
Ajax経由でテーブルから取得した多次元連想配列をJSON
に変換したが、想定外の形式になってしまった。
変換する配列
default_flg
の設定値を基準に、グループ化してから変換したい。
Array
(
[0] => Array
(
[id_name] => aaa
[content] => aaaaaaaaaaaaaa
[default_flg] => 0
)
[1] => Array
(
[id_name] => bbb
[content] => bbbbbbbbbbbb
[default_flg] => 1
)
[2] => Array
(
[id_name] => ccc
[content] => cccccccccccccc
[default_flg] => 0
)
[3] => Array
(
[id_name] => ddd
[content] => dddddddddddd
[default_flg] => 1
)
)
実行するソースコード
$defaultContents = array_filter($contentArray, function ($array){
$default_flg = 1;
return $array['default_flg'] == $default_flg;
});
$Contents = array_filter($contentArray, function ($array){
$default_flg = 0;
return $array['default_flg'] == $default_flg;
});
return json_encode([$defaultContents, $Contents]);
変換したい形式
[
[
{"id_name":"bbb","content":"bbbbbbbbbbbb","default_flg":"1"},
{"id_name":"ddd","content":"dddddddddddd","default_flg":"1"}
],
[
{"id_name":"aaa","content":"aaaaaaaaaaaaaa","default_flg":"0"},
{"id_name":"ccc","content":"cccccccccccccc","default_flg":"0"}
]
]
結果
違う、そうじゃない。
[
{
"1":{"id_name":"bbb","content":"bbbbbbbbbbbb","default_flg":"1"},
"3":{"id_name":"ddd","content":"dddddddddddd","default_flg":"1"}
},
{
"0":{"id_name":"aaa","content":"aaaaaaaaaaaaaa","default_flg":"0"},
"2":{"id_name":"ccc","content":"cccccccccccccc","default_flg":"0"}
}
]
原因
変換元の配列のindexが"0"から始まっていない。
$defaultContents
の配列
Array
(
[1] => Array
(
[id_name] => bbb
[content] => bbbbbbbbbbbb
[default_flg] => 1
)
[3] => Array
(
[id_name] => ddd
[content] => dddddddddddd
[default_flg] => 1
)
)
解決策
array_values
を使用して、indexが"0"から始まるようにした。
※array_values
=元のindex
を無視して値を順に設定していく関数とのこと。
$defaultContents = array_filter($contentArray, function ($array){
$default_flg = 1;
return $array['default_flg'] == $default_flg;
});
$Contents = array_filter($contentArray, function ($array){
$default_flg = 0;
return $array['default_flg'] == $default_flg;
});
return json_encode([array_values($defaultContents), array_values($Contents)]);