データとしては現在の形で持っておいて、
出力する直前に表示形式に合わせた配列構造に整形するというのはよくある形かなと思います。
PHP
1<?php
2
3$shop_list = array(
4 '0' => array(
5 'code' => 1,
6 'client_code' => 2,
7 'client_name' => 'PHP書店',
8 'pref_code' => 13,
9 'pref_name' => '東京都',
10 'shop_name' => '渋谷',
11 ),
12 '1' => array(
13 'code' => 1,
14 'client_code' => 1,
15 'client_name' => 'JS書店',
16 'pref_code' => 13,
17 'pref_name' => '東京都',
18 'shop_name' => '渋谷',
19 ),
20 '2' => array(
21 'code' => 1,
22 'client_code' => 1,
23 'client_name' => 'JS書店',
24 'pref_code' => 1,
25 'pref_name' => '北海道',
26 'shop_name' => '札幌',
27 ),
28 '3' => array(
29 'code' => 1,
30 'client_code' => 1,
31 'client_name' => 'JS書店',
32 'pref_code' => 13,
33 'pref_name' => '東京都',
34 'shop_name' => '原宿',
35 ),
36 // 省略
37);
38
39$shop_list_for_view = convertListForView($shop_list);
40var_dump($shop_list_for_view);
41displayShopList($shop_list_for_view);
42
43function convertListForView($shop_list){
44 $list_for_view = [];
45 foreach($shop_list as $shop){
46 //書店名と県名を添え字に使って表示用のツリー構造を表現
47 $list_for_view[$shop["client_name"]][$shop["pref_name"]][] = $shop;
48 }
49
50 //必要に応じてソートしてから返す
51 return $list_for_view;
52}
53
54function displayShopList($shop_list_for_view){
55 foreach($shop_list_for_view as $client_name => $client_list){
56//実際はHTMLを出力
57 echo $client_name;
58 echo PHP_EOL;
59 foreach($client_list as $pref_name => $shop_list){
60 echo "*".$pref_name;
61 echo PHP_EOL;
62 foreach($shop_list as $shop){
63 echo "**".$shop["shop_name"]."店";
64 echo PHP_EOL;
65 }
66 }
67 }
68}
array(2) {
["PHP書店"]=>
array(1) {
["東京都"]=>
array(1) {
[0]=>
array(6) {
["code"]=>
int(1)
["client_code"]=>
int(2)
["client_name"]=>
string(9) "PHP書店"
["pref_code"]=>
int(13)
["pref_name"]=>
string(9) "東京都"
["shop_name"]=>
string(6) "渋谷"
}
}
}
["JS書店"]=>
array(2) {
["東京都"]=>
array(2) {
[0]=>
array(6) {
["code"]=>
int(1)
["client_code"]=>
int(1)
["client_name"]=>
string(8) "JS書店"
["pref_code"]=>
int(13)
["pref_name"]=>
string(9) "東京都"
["shop_name"]=>
string(6) "渋谷"
}
[1]=>
array(6) {
["code"]=>
int(1)
["client_code"]=>
int(1)
["client_name"]=>
string(8) "JS書店"
["pref_code"]=>
int(13)
["pref_name"]=>
string(9) "東京都"
["shop_name"]=>
string(6) "原宿"
}
}
["北海道"]=>
array(1) {
[0]=>
array(6) {
["code"]=>
int(1)
["client_code"]=>
int(1)
["client_name"]=>
string(8) "JS書店"
["pref_code"]=>
int(1)
["pref_name"]=>
string(9) "北海道"
["shop_name"]=>
string(6) "札幌"
}
}
}
}
PHP書店
*東京都
**渋谷店
JS書店
*東京都
**渋谷店
**原宿店
*北海道
**札幌店
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/23 10:15