急ぎで組んだので、結果表示部分がかなり雑ですが、とりあえず動くと思います。
入力データの条件が、「種類が多くて、特徴の項目が多い複雑なもの」ということですが、下のコードでは、とりあえず分岐が必ず2つに分かれるデータを渡しています。
1列目が「結果」、2列目以降が「特徴」で、個数は可変にできると思います。
これを実現するため、再帰処理など、多少複雑なことをしています。
余裕があれば別途で解説も追記したいのですが、いったんこれでよろしくお願いします。
よかったらご自身で改良してみて下さい。
根本的にバグっててどうしようもない、または疑問点等ありましたら、お知らせいただけると幸いです。
lang
1<?php
2
3/* 木構造をつくる */
4function toTree($answer, $conditions) {
5 $condition = array_shift($conditions);
6 if ($conditions) {
7 return array($condition => toTree($answer, $conditions));
8 } else {
9 return array($condition => $answer);
10 }
11}
12
13$csv = array(
14 '"結果1","色1","形1","大きさ1","匂い1","価格1"',
15 '"結果2","色2","形2","大きさ2","匂い2","価格2"',
16 '"結果3","色1","形3","大きさ3","匂い3","価格3"',
17 '"結果4","色2","形4","大きさ4","匂い4","価格4"',
18 '"結果5","色1","形1","大きさ5","匂い5","価格5"',
19 '"結果6","色2","形2","大きさ6","匂い6","価格6"',
20 '"結果7","色1","形3","大きさ7","匂い7","価格7"',
21 '"結果8","色2","形4","大きさ8","匂い8","価格8"',
22 '"結果9","色1","形1","大きさ1","匂い9","価格9"',
23 '"結果10","色2","形2","大きさ2","匂い10","価格10"',
24 '"結果11","色1","形3","大きさ3","匂い11","価格11"',
25 '"結果12","色2","形4","大きさ4","匂い12","価格12"',
26 '"結果13","色1","形1","大きさ5","匂い13","価格13"',
27 '"結果14","色2","形2","大きさ6","匂い14","価格14"',
28 '"結果15","色1","形3","大きさ7","匂い15","価格15"',
29 '"結果16","色2","形4","大きさ8","匂い16","価格16"',
30 '"結果17","色1","形1","大きさ1","匂い1","価格17"',
31 '"結果18","色2","形2","大きさ2","匂い2","価格18"',
32 '"結果19","色1","形3","大きさ3","匂い3","価格19"',
33 '"結果20","色2","形4","大きさ4","匂い4","価格20"',
34 '"結果21","色1","形1","大きさ5","匂い5","価格21"',
35 '"結果22","色2","形2","大きさ6","匂い6","価格22"',
36 '"結果23","色1","形3","大きさ7","匂い7","価格23"',
37 '"結果24","色2","形4","大きさ8","匂い8","価格24"',
38 '"結果25","色1","形1","大きさ1","匂い9","価格25"',
39 '"結果26","色2","形2","大きさ2","匂い10","価格26"',
40 '"結果27","色1","形3","大きさ3","匂い11","価格27"',
41 '"結果28","色2","形4","大きさ4","匂い12","価格28"',
42 '"結果29","色1","形1","大きさ5","匂い13","価格29"',
43 '"結果30","色2","形2","大きさ6","匂い14","価格30"',
44 '"結果31","色1","形3","大きさ7","匂い15","価格31"',
45 '"結果32","色2","形4","大きさ8","匂い16","価格32"',
46 );
47
48$identificationKey = array();
49foreach ($csv as $line) {
50 $columns = explode(',', $line);
51 list($answer, $conditions) = array(array_shift($columns), $columns);
52
53 $identificationKey = array_merge_recursive($identificationKey, toTree($answer, $conditions));
54}
55
56
57/* 木構造から結果を表示する */
58function getResults($conditions, &$bookings, $number) {
59 $results = array();
60 if ($number < 10) {
61 $number = "0{$number}";
62 }
63 foreach ($conditions as $condition => $next) {
64 if (is_array($next)) {
65 $nextNumber = array_shift($bookings);
66 $results[] = "{$number}:{$condition}・・・・・・{$nextNumber}へ";
67 $results = array_merge($results, getResults($next, $bookings, $nextNumber));
68 } else {
69 $results[] = "{$number}:{$condition}・・・・・・{$next}";
70 }
71 }
72 asort($results);
73 return $results;
74}
75
76$bookings = range(2, 9999);
77foreach (getResults($identificationKey, $bookings, 1) as $result) {
78 echo "{$result}\n";
79}
80
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/03/04 02:50
2015/04/06 11:43