質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Q&A

解決済

1回答

1637閲覧

php strpos()がうまくいかない

atsuaa0618

総合スコア9

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

0グッド

0クリップ

投稿2020/04/16 02:20

前提・実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

php

1if (strpos($file_content, $checked)) { //ここがうまくいかない(falseになる)

置換後の文字列が含まれないことを検査しているようだけど、
アルゴリズム的にそれでいいんでしょうか?

投稿2020/04/16 02:34

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

atsuaa0618

2020/04/16 02:43

早速のお返事ありがとうございます。 完全にそこに目がいってませんでした、正しくは$uncheckでした。 (訂正) if (strpos($file_content, $uncheck) !== false) { 返り値に「0」がくるとfalseと評価されたので少し書き換えました。 (結果) 0 2 なかった。 1 2 なかった。 2 2 なかった。 3 2 なかった。 $b[]の2番目(意図的に外してた部分)だけが「なかった。」状態になりました。誰かに見てもらうって大事ですね。ありがとうございました。
退会済みユーザー

退会済みユーザー

2020/04/16 02:58

似たような変数名が多く見受けられるので、その手のうっかりに注意です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問