回答編集履歴
1
追記です。
answer
CHANGED
@@ -53,4 +53,111 @@
|
|
53
53
|
↑これ、pnkとqtyの両方を array_uniqueしていますよね。
|
54
54
|
|
55
55
|
通常の買い物を考えると、「商品」が異なっても「購入数(数量)」は同じ、は有り得ると思うのですが、
|
56
|
-
array_uniqueすることで、「購入数(数量)」のデータが欠如する可能性が高そうですが、大丈夫なのでしょうか?
|
56
|
+
array_uniqueすることで、「購入数(数量)」のデータが欠如する可能性が高そうですが、大丈夫なのでしょうか?
|
57
|
+
|
58
|
+
|
59
|
+
|
60
|
+
コメントからの追記
|
61
|
+
---
|
62
|
+
|
63
|
+
pnk「123456」qty「3」とpnk「234567」qty「4」を入力した場合、送られてきた値は、
|
64
|
+
↓のような感じ・・部品番号と数量は、「添え字」の同じものが対ですね。
|
65
|
+
```
|
66
|
+
//部品番号
|
67
|
+
$pnk = [1=> 123456, 2 => 234567];
|
68
|
+
//数量
|
69
|
+
$qty = [1=> 3, 2 => 4];
|
70
|
+
```
|
71
|
+
この$pnkを条件に取得したデータ$rowsは、
|
72
|
+
```
|
73
|
+
$rows = [
|
74
|
+
0 => ["partsnumber" => 123456, "description" => '部品A', "unitprice" => 100, "stockqty" => 1000],
|
75
|
+
1 => ["partsnumber" => 234567, "description" => '部品B', "unitprice" => 200, "stockqty" => 2000]
|
76
|
+
];
|
77
|
+
|
78
|
+
```
|
79
|
+
こんな感じの内容かと、想像します。(partsnumber以外は、カラム名から適当な値を入れています。)
|
80
|
+
|
81
|
+
$rowsの1レコード($row)には$partsnumberがあり、
|
82
|
+
この$partsnumberは、$pnkの配列のに必ずある「値」である、という想定になります。
|
83
|
+
|
84
|
+
つまり、
|
85
|
+
配列[$pnk]の中から該当する値[$partsnumber]の添え字が分かれば、
|
86
|
+
数量も同じ添え字を使って表示することが出来ます。
|
87
|
+
|
88
|
+
php初心者さんのようですので、
|
89
|
+
自分で$pnkをループして、$partsnumberと比較し該当の添え字を見つけるのでもいいです。
|
90
|
+
|
91
|
+
今のコードを流用するなら、こんな感じでしょうか。
|
92
|
+
```php
|
93
|
+
foreach($rows as $row){
|
94
|
+
foreach(["partsnumber","description","unitprice","stockqty"] as $val){
|
95
|
+
//ここは省略
|
96
|
+
}
|
97
|
+
foreach($pnk as $key=>$val){
|
98
|
+
//同じ部品番号の時に、テーブルを出力する
|
99
|
+
if($val == $partsnumber){
|
100
|
+
//表示用の数量
|
101
|
+
$show_qty = isset($qty[$key]) ? $qty[$key]:"なし";
|
102
|
+
print <<<eof
|
103
|
+
<th class="th"><div id="sent14_stl">{$partsnumber}</div></th>
|
104
|
+
<th class="th"><div id="sent14_stl">{$description}</div></th>
|
105
|
+
<th class="th" align="right"><div id="sent14"_stl>{$unitprice}</div></th>
|
106
|
+
<th class="th"><div id="sent14_stl">{$stockqty}</div></th>
|
107
|
+
<th class="th"><div id="sent14_stl">{$show_qty}</div></th>
|
108
|
+
eof;
|
109
|
+
print "<tr>\n";
|
110
|
+
|
111
|
+
//これ以降の$pnkのループは不要なので、処理を抜けます。
|
112
|
+
break;
|
113
|
+
}
|
114
|
+
}
|
115
|
+
}
|
116
|
+
```
|
117
|
+
|
118
|
+
自分でループさせずとも、「配列から、指定した値と同じ最初のキー(添え字)を探す」array_searchという便利な関数もあります。
|
119
|
+
※結果として「0」と「false」が戻ってくる関数ですので、使い方は[リファレンス](http://php.net/manual/ja/function.array-search.php)をよく読んでくださいね。
|
120
|
+
|
121
|
+
array_searchを使うなら、こんな感じです。
|
122
|
+
```php
|
123
|
+
foreach($rows as $row){
|
124
|
+
foreach(["partsnumber","description","unitprice","stockqty"] as $val){
|
125
|
+
//ここは省略
|
126
|
+
}
|
127
|
+
//該当の添え字(キー)を探す。
|
128
|
+
$key = array_search($partsnumber, $pnk);
|
129
|
+
if($key !== false) { continue; }// 念の為、添え字が見つからなかったら次の処理へ・・
|
130
|
+
//表示用の数量
|
131
|
+
$show_qty = isset($qty[$key]) ? $qty[$key]:"なし";
|
132
|
+
//テーブルを出力する
|
133
|
+
print <<<eof
|
134
|
+
<th class="th"><div id="sent14_stl">{$partsnumber}</div></th>
|
135
|
+
<th class="th"><div id="sent14_stl">{$description}</div></th>
|
136
|
+
<th class="th" align="right"><div id="sent14"_stl>{$unitprice}</div></th>
|
137
|
+
<th class="th"><div id="sent14_stl">{$stockqty}</div></th>
|
138
|
+
<th class="th"><div id="sent14_stl">{$show_qty}</div></th>
|
139
|
+
eof;
|
140
|
+
print "<tr>\n";
|
141
|
+
}
|
142
|
+
```
|
143
|
+
|
144
|
+
ちなみにですが、上記のコードでは、
|
145
|
+
$pnkのカウントが0の場合は、テーブルの出力結果が無いので、$rowsを回して処理をする必要がありません・・・というよりも、そもそも$rowsの取得自体が無駄と言えます。
|
146
|
+
|
147
|
+
なので、最初の方で、この判別をしてしまうのが効率的です。
|
148
|
+
|
149
|
+
```php
|
150
|
+
foreach(["pnk","qty"] as $val){
|
151
|
+
//中身は省略
|
152
|
+
}
|
153
|
+
|
154
|
+
if(count($pnk) == 0){
|
155
|
+
print "<p>入力エラー:部品番号を入力してください</p>\n";
|
156
|
+
}else{
|
157
|
+
//続きの処理はここから・・・
|
158
|
+
try{
|
159
|
+
//(SQLサーバーへ接続)
|
160
|
+
。。。以下略
|
161
|
+
|
162
|
+
}
|
163
|
+
```
|