phpで、数字+文字列(ex.13才、5000円)の型が整数と判定されます。数字+文字列の時は文字列、数字だけの時を数字と判定したいのですがどうしたらいいのでしょうか?

A 回答 (1件)

こちらでも


http://php.net/manual/ja/function.ctype-digit.php
ダメなのでしょうか?
    • good
    • 0
この回答へのお礼

解決しました!ありがとうございます!

お礼日時:2017/09/17 17:51

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

Qプログラミング

プログラミングを学びたいんですが最初にある程度プログラミングができるようになってからアルゴリズム論を学ぶ方がいいですか?それとも最初にアルゴリズム論を学んだ方がいいですか?

Aベストアンサー

何の言語か知りませんが、最初に、アルゴリズムなどに手をつけたら、闇の中だと思いますね。よく、構文と勘違いしている人がいますね。

アルゴリズムの定義をどういうように解釈しているのか分かりませんが、アルゴリズムはコンピュータやプログラミング言語に依存しません。一般的な定義は「問題を解くための論理または手順」のこと。また、コンピュータのプログラミング向きでもないものも存在します。

一度は、丁寧に勉強しましたが、私は、ほとんどアルゴリズムは分かっていません。たぶん、古典的なものは、コンピュータのない時代に数学の天才が作ったものだと思いますが、囲碁や将棋の定石のような解釈しかしていません。VBAなどでは、アルゴリズムを使った人など、年に一度、現れるかどうかですね。理由は、.NetFrameWork などの関数に、すでに包合されているからです。

ここのサイトの下に代表的なアルゴリズムの名称が出ています。

http://e-words.jp/w/%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0.html

何の言語か知りませんが、最初に、アルゴリズムなどに手をつけたら、闇の中だと思いますね。よく、構文と勘違いしている人がいますね。

アルゴリズムの定義をどういうように解釈しているのか分かりませんが、アルゴリズムはコンピュータやプログラミング言語に依存しません。一般的な定義は「問題を解くための論理または手順」のこと。また、コンピュータのプログラミング向きでもないものも存在します。

一度は、丁寧に勉強しましたが、私は、ほとんどアルゴリズムは分かっていません。たぶん、古典的なものは...続きを読む

Q派生クラスの利用にな当たり

以下のURL~プログラム見れます。
http://afurieitohannei.la.coocan.jp/P270haseiclass.htm
 さて、print 関数が9個もでてきて、スマートではないので
基礎レベルでは少し高度ですが!
$table=<<<eof~$〇〇〇=<<<eofを使いプログラムの変更を試みましたが、
エラーばかりでて、猿真似では到底できな代物です。
 この場合どうしたら<<<eofでprintの代替えができますか?
よろしくお願いします。

Aベストアンサー

print <<<eof
<tr>
<td>{$usr1->getname()}</td>
<td>{$usr1->getage()}</td>
<td>{$usr1->getadr()}</td>
<td>{$usr1->gettel()}</td>
<tr>
eof;

QC#プログラミング、少数の取り扱い方がわかりません

説明のしかたが下手で申し訳ないのですが

double型の数値で0.999999999999......と続く数値があったとして、この数値が1.0として扱われるのは小数第何位からですか?

また、1.0に近似してほしくないときはどうしたらいいですか?
C#でプログラミングをしています

Aベストアンサー

やろうとしていることは
lim_(x→0) f(x) = 1
で、 xを0に近付けつつ、f(x) を計算する、という感じなのでしょうか。


方法は3つあります。
(1) 計算式を工夫する。
0.999... だと 10^-15程度までしか正しくありませんが
0.000 .... 1 → 1.0 * 10^-n だと、10^-nの桁から15桁程度までの精度があります。
式を工夫して、計算結果が1ではなく、0に向うようにすることで、精度よく計算できるかもしれません
例)
g(x)=1-f(x) を求める。 ※「桁落ち」に注意


(2)十分な精度のある型を使う
https://ja.wikipedia.org/wiki/%E4%BB%BB%E6%84%8F%E7%B2%BE%E5%BA%A6%E6%BC%94%E7%AE%97
自作するか、既存のものを使う


(3)計算自体に意味があるのか、考えてみる。

Q最も高い身長を表示するプログラム

5人分の身長から最も高い身長を表示するプログラムをつくったのですが、エラーがでて実行できません。改善すべきところを教えてください。お願いします。
int main(void)
{
double a[5], max = 0;
int i;

for (i = 1; i <= 5; i++)
{
a[i] = 0;
}
printf("数値を5つ入力してください。\n");

for (i = 1; i <= 5; i++)
{
scanf("%lf", &a[i]);
}

for (i = 1; i <= 5; i++)
{
if (a[i] > max)
max = a[i];
}

printf("最も高い身長は%fです\n", max);

return 0;
}

Aベストアンサー

double a[5] ;
と宣言したら、安全に使えるのは a[0] 〜 a[4] です。

なので、このプログラムを安全なものにするなら
・double a[5]はそのまま、 i=0;i<5;i++ にして、 i=0〜4 の範囲で使う
・「i = 1; i <= 5; i++は変えない」 のなら
 ・ i=1〜5を、 0〜4 に対応させて使う
   単純明快なのは、 a[i-1] とすること
 ・double a[5+1] と宣言して、a[5] を安全に使えるようにする。
   a[0] が無駄になるけど気にしない

Q03分22秒36のような時間の単位を16進数で表すと、どうなりますか?

03分22秒36のような時間の単位を16進数で表すと、どうなりますか?
また、どうしてそのようになるのか、その変換の過程も教えてください。
お手数ですが、どうぞよろしくお願いします。

Aベストアンサー

私がプログラムを作るならば、ですが、静的に時間を表記するだけで計算式にも一切使わないのであればNo.3の方のように、時、分、秒、その下の位のそれぞれの座の数値をそれぞれ独立したビットの座で表現します(例えば分、秒をそれぞれ6ビット、秒の小数点以下を7ビットで表現し、これをくっつけて表現します)。またストップウォッチのように時間をカウントするのであれば、単位時間の積み重ね(ご質問文の時間表記だと、単位時間を100分の1秒とか)で表現します。

前者の場合、ただ画面に表示するだけの目的ぐらいにしか使えませんが、取り出したい座のビットマスクとの論理積とシフト演算だけで時、分、秒等の数字を取り出すことが容易です。しかし、足し算やインクリメントなど計算を伴うと、繰り上がりや繰り下がりを実現するために条件分岐が多発するため効率よくありません。
後者の場合、インクリメントや足し算などは容易に行うことができます。時、分、秒などを取り出すのは前者ほど単純ではありませんが、それにしても四則演算のみで取り出すことができるため条件分岐を多用する必要がなく、それほど効率の悪いものでもありません。

しかし、03分22秒36を 0C 04 ですか・・・これはちょっとわかりませんね。
後者の表記法にて単位時間を100分の1秒とすると、03分22秒36は単位時間の積み重ねだと10進数で20236(202.36秒)ですが、これを16進数で表現すると 4F 0C になります。インテル系CPUのバイトオーダーでは 0C 4F 00 00 (32ビットの場合)な感じにメモリに格納されると思います。見間違えているとか、実は3分22秒36とは違う時間だった、ってことはないですよね。

私がプログラムを作るならば、ですが、静的に時間を表記するだけで計算式にも一切使わないのであればNo.3の方のように、時、分、秒、その下の位のそれぞれの座の数値をそれぞれ独立したビットの座で表現します(例えば分、秒をそれぞれ6ビット、秒の小数点以下を7ビットで表現し、これをくっつけて表現します)。またストップウォッチのように時間をカウントするのであれば、単位時間の積み重ね(ご質問文の時間表記だと、単位時間を100分の1秒とか)で表現します。

前者の場合、ただ画面に表示するだけの目的ぐ...続きを読む

Q配列の空要素を特定の文字に置き換える

最大3つの要素が入る配列があります。
この配列の一部の要素が空の時に、それを特定の文字に置き換える方法を探しています。

具体的には、以下の様に空要素を「0」に置き換えたいです。
$array = ['']; → $array = ['0'];
$array = ['','1']; → $array = ['0','1'];
$array = ['2','','3']; → $array = ['2','0','3'];
$array = ['','4','']; → $array = ['0','4','0'];

要素には1〜4がランダムの位置に入ります。

色々と検索しましたが、上手く実現させる方法を見つけられませんでした。
ご教示頂ければ幸いです。

Aベストアンサー

# 愚直に繰り返し
foreach ($array as $i => $v) {
if ($v === '') $array[$i] = '0';
}

# リファレンスを活用した繰り返し
foreach ($array as &$v) {
if ($v === '') $v = '0';
}

配列をフィルターにかける
$array = array_map(function($v){return $v==='' ? '0' : $v;}, $array);

Q正規表現でスペースが何回かでた後の検索

正規表現の書き方をお教え願います。

ああ いい うう ええ おお

スペースが3回以上あるなら最後の おお を検索
スペースが2回以下なら対象外

おお は行末ですがの文字の長さは変化します。

宜しくお願い致します。

Aベストアンサー

正規表現を使用するツールが不明なので、もしかしたら外しているかもしれませんが

一般的には以下ではないでしょうか
(?<=^([^\s]+\s){3,})[^\s]+$

対象文字列をキャプチャしたい場合は
(?<=^([^\s]+\s){3,})([^\s]+)$
として、\1を使用してください。

QC言語について質問お願いします まだ勉強中なのでご指導よろしくお願いします str1=big str

C言語について質問お願いします

まだ勉強中なのでご指導よろしくお願いします

str1=big
str2=city
str3=bigcity

という結果にしたいのですが下のような結果になり困っております(´;Д;`)

もっといい書き方もあるかもしれませんが、今書いてあるコードを活かして訂正して結果通りになるにはどうすればいいでしょうか?!

その他アドバイスありましたら先輩方よろしくお願いしますm(_ _)m

Aベストアンサー

一つ訂正します
誤) char str1[4]={"big"},str2[4]={"city"}, str3[1]={0};
正) char str1[4]={"big"},str2[5]={"city"}, str3[1]={0};

ベテランでもこういう単純な間違いをすることがあります。
間違えもいいんです。それに気付いて直せれば。

ダメなときは、どこでダメになっているかを調べ、何故ダメになるかを調べ、どうすればダメじゃなくなるかを考えます。
これはベテランでも初心者でも変わりません。



原因は str3[1],str3[2] ...と範囲外に書き込んだことです。
例えるなら、「子供に紙とクレヨン渡したら、調子にのって床にまで絵を描いてしまった」状態です。
よって、対策は
・これらに書きこまないようにする。つまり、配列に収まる大きさの文字列にする
 (例えるなら「紙の外に描かないような小さな絵にする」)
・これらが書き込まれても問題ない状態にする。つまり、配列の大きさを十分に大きくする
 (例えるなら「絵が入るくらいの大きな紙にする」)
のどちらか、となります。

今回の場合、書き込みたい文字列が決まっているので、前者の「収まる文字列にする」という方法は使えません。
よって、後者の「文字列が収まる配列にする」が正解になります。

配列の大きさの指定方法はわかりますね?

一つ訂正します
誤) char str1[4]={"big"},str2[4]={"city"}, str3[1]={0};
正) char str1[4]={"big"},str2[5]={"city"}, str3[1]={0};

ベテランでもこういう単純な間違いをすることがあります。
間違えもいいんです。それに気付いて直せれば。

ダメなときは、どこでダメになっているかを調べ、何故ダメになるかを調べ、どうすればダメじゃなくなるかを考えます。
これはベテランでも初心者でも変わりません。



原因は str3[1],str3[2] ...と範囲外に書き込んだことです。
例えるなら、「子供に紙とクレヨン渡...続きを読む

Q連想配列に格納されたオブジェクトのdelete

次のコードをgcc5.4.0でコンパイルすると、

-----------------------------------------
#include <iostream>
#include <map>
using namespace std;

class samp{
};


int main(){

std::map<int, samp> sampls;


for(int i=0;i<3;i++){
samp *s = new samp();
sampls[i]=*s;
}

std::map<int, samp>::iterator it = sampls.begin();
while(it!=sampls.end()){
delete it->second;
sampls.erase(it);
it = sampls.begin();
}

return 0;
}
-----------------------------------------

以下のエラーメッセージが出力されるのですが、
どのように修正したらよいでしょうか?
test.cpp:21:16: error: type ‘class samp’ argument given to ‘delete’, expected pointer
delete it->second;

次のコードをgcc5.4.0でコンパイルすると、

-----------------------------------------
#include <iostream>
#include <map>
using namespace std;

class samp{
};


int main(){

std::map<int, samp> sampls;


for(int i=0;i<3;i++){
samp *s = new samp();
sampls[i]=*s;
}

std::map<int, samp>::iterator it = sampls.begin();
while(it!=sampls.end()){
delete it->second;
sampls.erase(it);
it = sampls.begin();
}

return 0...続きを読む

Aベストアンサー

samp クラスをコピーして問題ないなら

for(int i=0;i<3;i++){
// samp *s = new samp();
samp s; // 追加
sampls[i]=s;
}

std::map<int, samp>::iterator it = sampls.begin();
while(it!=sampls.end()){
// delete it->second;
sampls.erase(it);
it = sampls.begin();
}

諸般の事情でコピーできないのでポインタで管理したいなら

//std::map<int, samp> sampls; // 以下に変更
std::map<int, samp*> sampls;


for(int i=0;i<3;i++){
samp *s = new samp();
// sampls[i]=*s; // 以下に変更
sampls[i]=s;
}

//std::map<int, samp>::iterator it = sampls.begin(); // 以下に変更
std::map<int, samp*>::iterator it = sampls.begin();

samp クラスをコピーして問題ないなら

for(int i=0;i<3;i++){
// samp *s = new samp();
samp s; // 追加
sampls[i]=s;
}

std::map<int, samp>::iterator it = sampls.begin();
while(it!=sampls.end()){
// delete it->second;
sampls.erase(it);
it = sampls.begin();
}

諸般の事情でコピーできないのでポインタで管理したいなら

//std::map<int, samp> sampls; // 以下に変更
std::map<int, samp*> sampls;


for(int i=0;i<3;i++){
samp *s = new samp();
// sampls[i]=*s; // 以下に変更
s...続きを読む

Q3つの整数のうち奇数のみを表示するプログラミング

3つの整数のうち奇数のみを表示するプログラミングをどうやってかけばいいかわかりません…。
自分でも書いてみたのですが上手く実行されなくて困っています。
どなたか教えてください。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
int x, i;

for (i = 1; i <= 3; i=i+1)
{
printf("整数を入力する", x);
scanf("%d", &x);
}
{
if (x % 2 != 0)
printf("奇数だけ表示する");
   }
return 0;
}

Aベストアンサー

>さきほど教えてくださったプログラムを実行してみたのですが、3回目に入力した値しか奇数であると表示されないのですが…。
すみません。大変失礼しました。
提示文に誤りがありましたので、再提示します。修正個所は//修正 のコメントを入れています。
--------------------------------
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
int x[3], i;

for (i = 0; i < 3; i=i+1)
{
printf("整数を入力する"); //修正
scanf("%d", &x[i]); //修正
}
for (i = 0; i < 3; i=i+1)
{
if (x[i] % 2 != 0)
{
printf("%dは奇数です\n",x[i]);
}
}

return 0;
}

--------------------------------------
以下、実行結果です。
整数を入力する1
整数を入力する2
整数を入力する3
1は奇数です
3は奇数です
---------------------------------

>また、i = 0; i < 3; i = i + 1ではなくi=1; i<=3; i=i+1という条件を使わなければならないのですが、さきほどのプログラムのi = 0; i < 3; i = i + 1をi=1; i<=3; i=i+1に変えるだけで良いのですか?

その場合は、iは1から3迄の値をとりますので(私の提示したものはiは0から2迄の値)
scanf(”%d",&x[i]);を
scanf(”%d",&x[i-1]);にします。
同様に
if (x[i] % 2 != 0)
{
printf("%dは奇数です\n",x[i]);
}

if (x[i-1] % 2 != 0)
{
printf("%dは奇数です\n",x[i-1]);
}
にします。
そうするとiが1から3に対応して
0から2の値を取得できます。
つまり
x[0]・・・i=1のとき
x[1]・・・i=2のとき
x[2]・・・i=3のとき
になるようにします。

>さきほど教えてくださったプログラムを実行してみたのですが、3回目に入力した値しか奇数であると表示されないのですが…。
すみません。大変失礼しました。
提示文に誤りがありましたので、再提示します。修正個所は//修正 のコメントを入れています。
--------------------------------
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
int x[3], i;

for (i = 0; i < 3; i=i+1)
{
printf("整数を入力する"); //修正
scanf("%d", &x[i]); //修正
}
for (i = 0; i < 3; i=i+1)
...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報