dポイントプレゼントキャンペーン実施中!

以下の文を実行すると、$abcには「3」があるので、TRUEになるはずなのですが、
エコーすると「1」と記載されます。

<?php
$abc = "283743";
$abc = ereg("3",$abc);

echo $abc;

?>

以下の文を実行するとエコーしても何も表示されません。
「0」は該当しないので、FALSEと表示されると思うのですが・・。

<?php
$abc = "283743";
$abc = ereg("0",$abc);

echo $abc;

?>

ネットで調べると、それぞれTRUEとFALSEを返すと記載がありました。
それなのになぜ「0」と「何もなし」になるのでしょうか。

A 回答 (3件)

まず、eregの戻り値ですが


・マッチした場合は int型の1を返して
・マッチしない場合は bool型のfalseを返す
ようですね(CentOS-CLI版PHP5.2.5で確認)

・・・マニュアルの該当部分を見ると
確かに int で返ると書いてありますが、どうもマニュアルと違うようです・・・。

で、それらが返るとしてechoで表示されない理由ですが
int(1)の場合とfalseの場合で理由が異なります。

まず、falseですが
echo false;
とやると、falseがstring型へ自動型変換という手順を踏んでechoの対象になりますが
PHPの場合は falseをstring型へ変換すると ""(空文字列)になります。
(別の言語では"false"という文字列に変換されるものが多いですね)
よって、出力されません。

次に、int(1)が出力しない理由ですが
> echo $abc;
の部分を
echo $abc . "\n";
として動作確認して貰っていいでしょうか?
多分それで"1"と表示されるようになるはずです。

なぜ、改行文字をつけないと出力されないのかは
理由がわかりません・・・。
    • good
    • 0

http://php.benscom.com/manual/ja/function.ereg.php
ここをよく読みましたか?
return は int って書いてますよ。
$abc = "283743";
$abc = ereg("3",$abc);
echo $abc;
↑これが 1 と表示するのは仕様上正確な返りです。

boolで返す関数もありますし、intで返す型も混在しています。関数ごとに返りの型は違いますので、確認しながら使ってください。
ereg()は、intで返す関数ですよ。


また、返り値を正確に目で見たいのであれば
var_dump($abc);
を使ってください。

$abc = "283743";
$abc = ereg("0",$abc);
var_dump($abc);
とやれば、表示としては
bool(false)
と表示されます。
    • good
    • 0

別に、「true」とか「false」とかいう文字列を返すわけではなく


論理型のtrue値もしくはfalse値を返しており、echoで表示する際に、
可視化しているだけでしょう。
プログラム言語によってその辺の仕様はことなり、
「PHPではそういうもの」と考えるのが賢明でしょう。

この辺を参考に
http://www.php.net/manual/ja/language.types.bool …

キャストについては
http://www.php.net/manual/ja/language.types.type …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!