teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2015/10/26 07:44

投稿

KenjiObata
KenjiObata

スコア440

answer CHANGED
@@ -1,3 +1,104 @@
1
1
  お手数ですが、
2
2
  $words の設定値を教えていただけないでしょうか?
3
- foreachの参照元に $words['a']が設定されていますが、掲載されているソースには、$wordsが宣言されていないようです。
3
+ foreachの参照元に $words['a']が設定されていますが、掲載されているソースには、$wordsが宣言されていないようです。
4
+
5
+ ソース確認いたしました。
6
+ 3か所に間違いと思われる個所がございました。(コメントをご参照ください)
7
+ されたいことがあっているかどうか判断しかねますが、文法エラーはなくなりました。
8
+
9
+
10
+ ```php
11
+ <?php
12
+ $errorm = 's-non-used';
13
+
14
+
15
+ //キーワードの直積の一覧を作成
16
+ //全変数を宣言
17
+
18
+ $k['a'] = array
19
+ (
20
+
21
+ 'product' => 'pc,phone,heater',
22
+ 'event' => '',
23
+ 'star' => '',
24
+ 'number' => '',
25
+ 'trouble' => '',
26
+ 'real' => '',
27
+ 'desire' => '',
28
+ 'price' => '5800,4200,3400,980,1980,580',
29
+ 'labor' => '今売れてます,安い,配送無料,無料保証,サービス第一,安全第一,他社よりすごい,今すぐお値引き,係員にお申し付けください',
30
+
31
+ );
32
+
33
+ //各変数にエラーフラグを格納
34
+ foreach ($k['a'] as $key => $value)
35
+ {
36
+ if($value === '')
37
+ {
38
+ $value = $errorm;
39
+
40
+ //本来はelseでGETから変数を取得しています。
41
+ }
42
+ }
43
+
44
+ //各変数をカンマで切り分けて配列にする
45
+ foreach ($k['a'] as $key => $value)
46
+ {
47
+ if($value === $errorm)
48
+ {
49
+ unset($value);
50
+ }
51
+ else
52
+ {
53
+ //修正点①
54
+ //ここでカンマ区切りのデータを配列化していますが、$kに反映されていませんでした。
55
+ $k['a'][$key] = explode( ',', preg_replace ("/,+/",',',$value));
56
+ }
57
+ }
58
+
59
+ $words = $k;
60
+ $k = '';
61
+
62
+ //全nameに対しての繰り返し処理ex)product,price,star...
63
+ foreach ($words['a'] as $key => $value)
64
+ {
65
+
66
+ //受け入れ配列の要素数を入力配列の要素数分増やす
67
+ if($k === '')
68
+ {
69
+ $k = $value;
70
+ }
71
+
72
+ //修正点2
73
+ // 上記if 文のelse時のみ実行されますが、$words配列1個目が必ず処理されていません 1件目の"product"が処理されていませんでした。
74
+
75
+ $t = 0;
76
+ //ここから下でエラーが出てます。
77
+
78
+ //新しく入れる分重複要素を増やす
79
+ foreach($k as $value2)
80
+ {
81
+ foreach($value as $i)
82
+ {
83
+ $depot[] = $value2;
84
+ }
85
+ }
86
+
87
+ //増やした重複要素に新しく入れる分を全パターン入れる
88
+ foreach($k as $i)
89
+ {
90
+ foreach ($value as $value2)
91
+ {
92
+ // 修正点3
93
+ // $depot への代入文法に間違いがございました。(2次配列の宣言後に代入)
94
+
95
+ $depot[$t] = array($key=>$value2);
96
+ ++$t;
97
+ }
98
+ }
99
+
100
+ $k = $depot;
101
+ unset($depot);
102
+ }
103
+ ?>
104
+ ```