回答編集履歴

1

加筆修正

2019/03/02 12:32

投稿

退会済みユーザー
test CHANGED
@@ -1 +1,79 @@
1
1
  コード内で使用している変数を var_dump() を駆使して内容を確認するところから試してください。
2
+
3
+
4
+
5
+ アドバイスを付け加えるならば、
6
+
7
+
8
+
9
+ 1)file()の仕様を確認してください。
10
+
11
+ [PHP: file - Manual](http://jp2.php.net/manual/ja/function.file.php)
12
+
13
+ 指定されたファイルから読み取って、指定の配列に格納するのだけど、
14
+
15
+ フラグを適切に設定しないと格納したデータに改行コードがついて回ります。
16
+
17
+ つまり、
18
+
19
+ `$hoge = file($file);`
20
+
21
+ は$hogeに配列に改行コード付きで格納されてます。
22
+
23
+ `$hoge = file($file, FILE_IGNORE_NEW_LINES);`
24
+
25
+ などとすれば改行コードを自動的に省いてくれます。
26
+
27
+
28
+
29
+ 2)総当たりするときはgotoよりもforeach()使う。
30
+
31
+ [PHP: foreach - Manual](http://jp2.php.net/manual/ja/control-structures.foreach.php)
32
+
33
+ 例えば
34
+
35
+ ```php
36
+
37
+ foreach ($hoge as $item) {
38
+
39
+ ~~~~
40
+
41
+ }
42
+
43
+ ```
44
+
45
+ みたいにすれば、配列`$hoge`に格納されている値を順に`$item`に代入されて繰り返されます。
46
+
47
+ ぶっちゃけ、goto依存するコードは構造が悪いです。
48
+
49
+ 繰り返し実行する制御構文をマスターしてください。
50
+
51
+ しかし、今回の事例では、実は繰り返し実行しなくても処理できてしまう便利な関数があります。
52
+
53
+ [PHP: array_search - Manual](http://jp2.php.net/manual/ja/function.array-search.php)
54
+
55
+ 改行コードなしに配列にデータファイルから読み取って格納されている前提で、
56
+
57
+ この関数一発であるかないか判定できます。
58
+
59
+ [PHP: array_splice - Manual](http://jp2.php.net/manual/ja/function.array-splice.php)
60
+
61
+ この関数を使えば、指定の位置の要素を削除したり、削除した位置の別のデータを詰めることもできます。
62
+
63
+ もしもこの関数でヒット後のデータを削除するなら、
64
+
65
+ さっきのarray_search()の結果で得られたキーが使えるはずです。
66
+
67
+ 配列を加工したらデータファイルに書き出すのをお忘れなく。
68
+
69
+
70
+
71
+ 3)文字化けで応答が返るのは、エンコーディングのミスではないか。
72
+
73
+ 例えばWindows上で一般的に使われているのがShiftJISに機種依存文字を加えたCP932とかSJIS-winというものですが、
74
+
75
+ 一般的にwebサーバー上で動かすときのエンコーディングはUTF-8(のなかのBOMなし)というものです。
76
+
77
+ ファイルを保存するときどのエンコーディングを使っているかを確認し、
78
+
79
+ もしもSJISとかだったらUTF-8にしてみてください。