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

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

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

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

PHP

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

Q&A

解決済

4回答

4875閲覧

PHPで回文かどうかを判定する

sumomomo

総合スコア15

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

PHP

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

1グッド

0クリップ

投稿2016/05/21 00:11

文字列が回文(palindrome word)かどうかチェックする例題に挑戦しているのですが、
結果を4回くりかえしてしまいます。
どうにか変えたいのですが、ここからうまくすすめません。
なにか改善策はありますでしょうか。

php

1<?php 2 3 4class myClass{ 5 6 7public function myKaibun(){ 8$str = "racecar"; 9echo "Checking this word ----> ".$str."<br>"; 10$len = strlen($str); 11for($x =0;$x< $len/2 ; $x++){ 12if($str[$x] != $str[$len - $x -1] ){ 13echo "This is not palindrome word!<br>"; 14}else{ 15echo "Thid is palindrome word!<br>"; 16} 17} 18} 19 20} 21$a = new myClass(); 22$a ->myKaibun(); 23?> 24
退会済みユーザー👍を押しています

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

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

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

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

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

guest

回答4

0

sonor_3rdさんの意見に便乗
質問文のようにASCII文字を使っている限り大丈夫ですが、
strrev関数はマルチバイト非対応で化けます(下記参照)
しかし、同ページの下部のフォーラムで紹介されている方法を使う事でマルチバイトでのstrrevが実現できました

PHP

1$ php -a 2Interactive shell 3 4php > $hoge = "しんぶんし"; 5php > echo strrev($hoge); 6��㓂㶁㓂㗁� 7 8php > echo $hoge[0]; 910 11php > function utf8_strrev($str){ 12php { preg_match_all('/./us', $str, $ar); 13php { return join('',array_reverse($ar[0])); 14php { } 15 16php > echo utf8_strrev("しんぶん"); 17んぶんし

投稿2016/05/21 01:39

miyabi-sun

総合スコア21158

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

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

sumomomo

2016/05/21 01:43

strrev関数と、あとarray_reverseも一緒に使うのは考えていませんでした。挑戦してみます!回答ありがとうございます。
guest

0

不完全かもしれませんけど再帰的パターンを用いて正規表現とかで。

php

1$list = [ 2 "しんぶんし", 3 "たけやぶやけた", 4 "たけやぶやけたか", 5 "あたけやぶやけた", 6]; 7 8$pattern = '/^((.)(?:(?1)|.)?\2)$/u'; 9 10foreach ($list as $str) { 11 $ret = preg_match($pattern, $str); 12 printf("%s %s\n", $ret ? 'ok' : 'ng', $str); 13}
ok しんぶんし ok たけやぶやけた ng たけやぶやけたか ng あたけやぶやけた

投稿2016/05/21 01:39

ngyuki

総合スコア4514

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

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

sumomomo

2016/05/21 01:45

全く思い浮かばなかったです。回答ありがとうございます!こちらも挑戦してみます。
退会済みユーザー

退会済みユーザー

2016/05/21 01:46

面白いですね。
guest

0

ベストアンサー

文字数を変えるとわかりますが、単語ごとではなく一文字ずつ判定していて、結果を表示しています。

修正ソースも作りましたが、見ないで頑張る場合は見ないで下さいw

php

1ダミー 2ダミー 3ダミー 4ダミー 5ダミー 6ダミー 7ダミー 8ダミー 9ダミー 10ダミー 11ダミー 12ダミー 13 14 15 16 17 18 19<?php 20 21class myClass 22{ 23 24 public function myKaibun() 25 { 26 $str = "racecar"; 27 echo "Checking this word ----> " . $str . "<br>"; 28 $len = strlen($str); 29 $palindrome = TRUE; 30 for ($x = 0; $x < $len / 2; $x++) { 31 if ($str[$x] != $str[$len - $x - 1]) { 32 $palindrome = FALSE; 33 } 34 } 35 if ($palindrome) { 36 echo "Thid is palindrome word!<br>"; 37 } else { 38 echo "This is not palindrome word!<br>"; 39 } 40 } 41 42} 43 44$a = new myClass(); 45$a->myKaibun(); 46?>

投稿2016/05/21 00:20

編集2016/05/21 00:30
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

sumomomo

2016/05/21 00:26

人文字ずつ判定して、かつ結果は一回のみ表示、という方法を探していました。 単語ごとの方もアプローチしてみます。 回答ありがとうございます。
退会済みユーザー

退会済みユーザー

2016/05/21 00:29

ん?多分勘違いしてます。 一文字ずつ判定結果を表示してしまっています。 結果の出るソースもつけました。
guest

0

質問内容とは別のアプローチですが、strrevを使う方法はいかがでしょうか。

投稿2016/05/21 01:03

sonor_3rd

総合スコア114

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

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

sumomomo

2016/05/21 01:41

回答ありがとうございます。strrevでも試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問