前提・実現したいこと
strpos()がfalseになってしまう原因と解決策を知りたいです。
ここに質問の内容を詳しく書いてください。
以下のコードであたえられた複数の文字列(配列$Aに格納されている)に対して、配列$bの連想配列に対応する箇所を書き換えるプログラムです。
もともと書き換え部分(コード内では$uncheck)が無い場合、strpos()関数を使ってif分岐してループを飛ばす構造です。
発生している問題・エラーメッセージ
0string(8) "abcdefgh" string(3) "abc" string(3) "ijk" bool(false) 0 なかった。 string(3) "def" string(3) "lmn" bool(false) 1 なかった。 string(3) "ghi" string(3) "opq" bool(false) 2 なかった。 //以下同様
このように、該当箇所があるにもかかわらずstrpos()の返り値はfalseです。原因がわかりません。
該当のソースコード
PHP
1$A = [ 2 'abcdefgh', 3 'abcdefgh', 4 'abcdefgh', 5 'abcdefgh' 6]; 7 8$b = [ 9 'abc' => 'ijk', 10 'def' => 'lmn', 11 'ghi' => 'opq' 12]; 13 14$c= fileContentsStrtr($A, $b); 15var_dump($c); 16 17function fileContentsStrtr($file_contents = [], $arrayReplace = [''=>'']) 18{ 19 $buffs = []; 20 //複数のファイルに対してすべてに置換を適用 21 $j = 0; 22 $fjg = []; 23 foreach ($file_contents as $file_content) { 24 print $j; 25 var_dump($file_content); //確認のため 26 print '<br>'; 27 $i = 0; 28 foreach ($arrayReplace as $uncheck => $checked) { 29 var_dump($uncheck); //確認のため 30 print '<br>'; 31 var_dump($checked); //確認のため 32 print '<br>'; 33 var_dump(strpos($file_content, $checked)); //確認のため 34 if (strpos($file_content, $checked)) { //ここがうまくいかない(falseになる) 35 array_push($buffs, str_replace($uncheck, $checked, $file_content)); 36 } else { 37 print ' '. $i. ' なかった。<br>'; 38 $flg[$j][$i] = 'none'; 39 } 40 $i++; 41 } 42 $j++; 43 } 44 return $buffs; 45}
補足情報(FW/ツールのバージョンなど)
PHP7.4.1

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/16 02:43
退会済みユーザー
2020/04/16 02:58