回答編集履歴

1

追記です。

2018/06/08 02:10

投稿

mix-peach
mix-peach

スコア1910

test CHANGED
@@ -109,3 +109,217 @@
109
109
  通常の買い物を考えると、「商品」が異なっても「購入数(数量)」は同じ、は有り得ると思うのですが、
110
110
 
111
111
  array_uniqueすることで、「購入数(数量)」のデータが欠如する可能性が高そうですが、大丈夫なのでしょうか?
112
+
113
+
114
+
115
+
116
+
117
+
118
+
119
+ コメントからの追記
120
+
121
+ ---
122
+
123
+
124
+
125
+ pnk「123456」qty「3」とpnk「234567」qty「4」を入力した場合、送られてきた値は、
126
+
127
+ ↓のような感じ・・部品番号と数量は、「添え字」の同じものが対ですね。
128
+
129
+ ```
130
+
131
+ //部品番号
132
+
133
+ $pnk = [1=> 123456, 2 => 234567];
134
+
135
+ //数量
136
+
137
+ $qty = [1=> 3, 2 => 4];
138
+
139
+ ```
140
+
141
+ この$pnkを条件に取得したデータ$rowsは、
142
+
143
+ ```
144
+
145
+ $rows = [
146
+
147
+ 0 => ["partsnumber" => 123456, "description" => '部品A', "unitprice" => 100, "stockqty" => 1000],
148
+
149
+ 1 => ["partsnumber" => 234567, "description" => '部品B', "unitprice" => 200, "stockqty" => 2000]
150
+
151
+ ];
152
+
153
+
154
+
155
+ ```
156
+
157
+ こんな感じの内容かと、想像します。(partsnumber以外は、カラム名から適当な値を入れています。)
158
+
159
+
160
+
161
+ $rowsの1レコード($row)には$partsnumberがあり、
162
+
163
+ この$partsnumberは、$pnkの配列のに必ずある「値」である、という想定になります。
164
+
165
+
166
+
167
+ つまり、
168
+
169
+ 配列[$pnk]の中から該当する値[$partsnumber]の添え字が分かれば、
170
+
171
+ 数量も同じ添え字を使って表示することが出来ます。
172
+
173
+
174
+
175
+ php初心者さんのようですので、
176
+
177
+ 自分で$pnkをループして、$partsnumberと比較し該当の添え字を見つけるのでもいいです。
178
+
179
+
180
+
181
+ 今のコードを流用するなら、こんな感じでしょうか。
182
+
183
+ ```php
184
+
185
+ foreach($rows as $row){
186
+
187
+ foreach(["partsnumber","description","unitprice","stockqty"] as $val){
188
+
189
+ //ここは省略
190
+
191
+ }
192
+
193
+ foreach($pnk as $key=>$val){
194
+
195
+ //同じ部品番号の時に、テーブルを出力する
196
+
197
+ if($val == $partsnumber){
198
+
199
+  //表示用の数量
200
+
201
+ $show_qty = isset($qty[$key]) ? $qty[$key]:"なし";
202
+
203
+ print <<<eof
204
+
205
+ <th class="th"><div id="sent14_stl">{$partsnumber}</div></th>
206
+
207
+ <th class="th"><div id="sent14_stl">{$description}</div></th>
208
+
209
+ <th class="th" align="right"><div id="sent14"_stl>{$unitprice}</div></th>
210
+
211
+ <th class="th"><div id="sent14_stl">{$stockqty}</div></th>
212
+
213
+ <th class="th"><div id="sent14_stl">{$show_qty}</div></th>
214
+
215
+ eof;
216
+
217
+ print "<tr>\n";
218
+
219
+
220
+
221
+ //これ以降の$pnkのループは不要なので、処理を抜けます。
222
+
223
+ break;
224
+
225
+ }
226
+
227
+ }
228
+
229
+ }
230
+
231
+ ```
232
+
233
+
234
+
235
+ 自分でループさせずとも、「配列から、指定した値と同じ最初のキー(添え字)を探す」array_searchという便利な関数もあります。
236
+
237
+ ※結果として「0」と「false」が戻ってくる関数ですので、使い方は[リファレンス](http://php.net/manual/ja/function.array-search.php)をよく読んでくださいね。
238
+
239
+
240
+
241
+ array_searchを使うなら、こんな感じです。
242
+
243
+ ```php
244
+
245
+ foreach($rows as $row){
246
+
247
+ foreach(["partsnumber","description","unitprice","stockqty"] as $val){
248
+
249
+ //ここは省略
250
+
251
+ }
252
+
253
+ //該当の添え字(キー)を探す。
254
+
255
+ $key = array_search($partsnumber, $pnk);
256
+
257
+ if($key !== false) { continue; }// 念の為、添え字が見つからなかったら次の処理へ・・
258
+
259
+ //表示用の数量
260
+
261
+ $show_qty = isset($qty[$key]) ? $qty[$key]:"なし";
262
+
263
+ //テーブルを出力する
264
+
265
+ print <<<eof
266
+
267
+ <th class="th"><div id="sent14_stl">{$partsnumber}</div></th>
268
+
269
+ <th class="th"><div id="sent14_stl">{$description}</div></th>
270
+
271
+ <th class="th" align="right"><div id="sent14"_stl>{$unitprice}</div></th>
272
+
273
+ <th class="th"><div id="sent14_stl">{$stockqty}</div></th>
274
+
275
+ <th class="th"><div id="sent14_stl">{$show_qty}</div></th>
276
+
277
+ eof;
278
+
279
+ print "<tr>\n";
280
+
281
+ }
282
+
283
+ ```
284
+
285
+
286
+
287
+ ちなみにですが、上記のコードでは、
288
+
289
+ $pnkのカウントが0の場合は、テーブルの出力結果が無いので、$rowsを回して処理をする必要がありません・・・というよりも、そもそも$rowsの取得自体が無駄と言えます。
290
+
291
+
292
+
293
+ なので、最初の方で、この判別をしてしまうのが効率的です。
294
+
295
+
296
+
297
+ ```php
298
+
299
+ foreach(["pnk","qty"] as $val){
300
+
301
+ //中身は省略
302
+
303
+ }
304
+
305
+
306
+
307
+ if(count($pnk) == 0){
308
+
309
+ print "<p>入力エラー:部品番号を入力してください</p>\n";
310
+
311
+ }else{
312
+
313
+ //続きの処理はここから・・・
314
+
315
+ try{
316
+
317
+ //(SQLサーバーへ接続)
318
+
319
+ 。。。以下略
320
+
321
+
322
+
323
+ }
324
+
325
+ ```