• 締切済み

PHPの記述の仕方について質問させてください。よろしくお願いします。

PHPの記述の仕方について質問させてください。よろしくお願いします。 私は、phpとmysqlでプログラムされているアプリケーションのプログラム修正をやらなければならなくなり、経験がなくて困っています。 アルファベット最大6文字+数字6桁というようなステータス管理IDを抽出する部分の実現方法なのですが、最新のID(アルファベットの文字列が長いもの)をDBから抽出する時はPHPでどのように書けばよいのでしょうか? 例えば、同じカラムに格納されている数字部分が共通な3つのレコードが存在する時 ABC-123456を抽出したい場合です。 A-123456(←Aが付与されます) AC-123456(←Cが付与されるます) ABC-123456(←Bが付与されます) preg much allとかで出来るのかと思い調べてはいますが、よくわかりませんでした。 どなたか、よろしくお願いします。

  • PHP
  • 回答数2
  • ありがとう数6

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

'SELECT status_id FROM status WHERE status_id REGEXP "123456$"' とするだけじゃないですか?

coco1000
質問者

お礼

yambejpさま。いつもご教授ありがとうございます。おかげさまでもう少しでわたしの分は終わりそうです。後、最後にアルファベットを規則的に並べるところを悩んでいます。 変数$resultにはACDB-123456が入っている時に、 $logodata=explode("-", $result);こうすると、 $logodata[0]にはデータACDBが入っているはずです。 それでこの文字列ACDBをABCDの文字列に並べ変えるやりかたが知りたいです。 並べ変えた上で例えば次はEを付加して、ABCDE-123456としてstatus_idとして発行したいと思っています。お忙しい中、すみません。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

<? $str=<<<eof testtest testtestA-123456testtest testtestAC-123456testtest testtestABC-123456testtest testtest eof; $pattern="/[A-Z]{1,6}-[0-9]{1,6}/"; preg_match_all($pattern,$str,$matches); print_r($matches); ?>

coco1000
質問者

補足

お忙しい中、早いお返事を本当にありがとうございます!!  もう1つ出来ましたら教えてください。 アルファベットは最大6桁まで増えていきます。 これらのレコードはstatusテーブルのstatus_idカラムにあるのですが、 status_id AD-111111 A-111112 AF-111112 AC-111113 ABC-111113 A-123456←抽出したい AC-123456←抽出したい ABC-123456←抽出したい DBから抽出して配列に格納したいのですがこれでよろしいのでしょうか。。。うまく動かなくて。 $dbh = Kether_DB_Factory::getHandle(); $res_result = $dbh->selectVal('SELECT status_id FROM status WHERE status_id REGEXP 123456$' , array());

関連するQ&A

  • PHP(.php)及びJavascrpit(.js)等のファイル名は、数字だけでも可能ですか?

    PHP(.php)及びJavascrpit(.js)等のプログラムファイルのファイル名は、数字だけでも可能ですか? 例:1234. php 例:1234.js やはり、「abc123.php」又は「abc123.js」のようにアルファベットで始める必要があるのでしょうか? 参考サイト等あれば、教えて下さい。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHP preg_replace のリンク作成

    PHPで作成している掲示板にて、 本文中の「>>5」を押すと、A_id=10&B_id=3 のメッセージを表示する機能を作っています。 10が「A_id」となります。 イメージ:http://XXXX.jp/show.php?A_id=10&B_id=3 $str = preg_replace('/^>>([0-9]+)/','<a href="show.php?A_id=\\1&B_id=★">\\0</a>',$str); A_id=\\1 には10など数字が設定できてます。 B_id=の★部分に、3などの数値を「変数」で設定することができません。 ($B_id_num など) どのようにすればよいのでしょうか?

    • ベストアンサー
    • PHP
  • SQL 部分一致検索について

    カラムAとカラムBはそれぞれ文字列が格納されているとします。このとき、カラムAには「ABC」カラムBには「ABC(株)」があるとした場合、カラムAとカラムBが部分一致しているかをSQLで検索する場合、どのようなSQL文になるかご存知でしょうか? 勿論予め、検索したい文字列が判っている場合は、like '% nnnnn %' ですが、文字列が判らずカラム同士で部分一致するカラムを選択したいのです。

  • PHP preg_match_all関数の配列をMysqlに格納したい

    PHP preg_match_all関数の配列をMysqlに格納したい PHP初心者です。 preg_march_all関数を使って正規表現でマッチングする練習を行っています。 preg_march_allを使った場合、マッチングした結果が多次元配列となって出力されると思うのですが、それらをそれぞれのレコードに分けてMysqlに格納したいと思っています。 php入門サイトのものを弄って作ったのですが、 while (! feof($fp)) { $s = fgets($fp); $n = preg_match_all($Pattern, $s, $ar, PREG_SET_ORDER); for ($i = 0; $i < $n; $i++) mysql_query("insert into seikihyougen1 (benri) value ('$ar[$i][2]')"); } 結果はマッチングした数のレコード分、benriカラムにArray[2]という文字列が入力されてしまいます。 これらをマッチングした文字列に直してMysqlに入れるにはどうすればよいのでしょうか?

    • ベストアンサー
    • PHP
  • PHPでのsubstr関数について

    PHPで、3問ほど質問です。 問1 PHPでプログラムを作成していて、思った結果が出てこないので、変数やら配列やらの 中身を表示させつつ、原因らしきものを突き止めました。 substr関数 です。 手元のプチリファレンスには、 substr(元の文字列,抽出開始位置,抽出する文字数) のようなことが書いてあるのですが、 抽出開始位置 ではなく、抽出を開始したい手前の位置 ではないのかと思いました。 というのも、 echo substr("abc",0,1); は、a が表示されますし、 echo substr("abc",3,1); は、何も表示されないからです。 というわけで、 substr(元の文字列,抽出を開始したい手前の位置,抽出する文字数) でいいのでしょうか? ○文字目から数えて、△文字分としたときにずれて表示されるので、ヘンだな~と 思っているのですが…。 問2 DOSプロンプト経由で、PEARをインストールしてみました。 (自分のパソコンです。XAMPPを使用しています) 最終的にinstall ok と表示されましたが、Warnning というメッセージがちらほらと。 大丈夫なんでしょうか? ただ、PEARの機能は使えましたが…。 問3 値を送る・返す関数ではなく、PHPで、サブルーチンというか、VBやVBAでいえば、Call文で 呼んでくるような、文の書き方を教えてください。 sub_keisan(); function sub_keisan(){ } のような引数なしの関数の書き方でいいのでしょうか?

    • ベストアンサー
    • PHP
  • IFとVLOOKUP

    DのコラムにIDaa001アルファベット2文字と数字3桁 Fのコラムに商品名の入ったシートaa DのコラムにID bb001アルファベット2文字と数字3桁 Fのコラムに商品名の入ったシートbb 上記二つのシートからデータを参照したいシートccが有ります。 シートccに入っているIDによって、参照するシートを変えたいので、IF関数を使ってみましたがうまくいきませんどの様にしたら良いのでしょうか? ちなみに私の書いた式は下記です =IF(A3=aa,VLOOKUP(D3,aa!A2:B99,2,FALSE),VLOOKUP(D3,bb!A2:B213,2,FALSE)) どうしたら良いのか分からなく、IDの頭2個のアルファベットをLEFT関数で抜き出して、Aのコラムに貼り付けて上記の式をつくってみましたがダメでした。 よろしくおねがいします。

  • 正規表現について

    PHP5.2.4を使用しています。 1文字以上のアルファベットと数字の組み合わせは許可(含めて) かつ 「ab」は許可しない(含めない) という正規表現はどのように記述すれば良いのでしょうか?(「01ab」「abc」は許可、「ab」は許可しない) 一応自分なりに考えてみたのですが、 $str = "abc"; if (preg_match("/[^(ab)][a-z0-9]+/", $str)) { print "match<br>\n"; } やはり駄目でした・・・

    • ベストアンサー
    • PHP
  • 正規表現での複数箇所の文字列置換について

    文字列から特定の文字を検出し、 HTMLタグに置換するスクリプトを作成しようとしています。 例: 元の文字列:xxxxxx[id:1]xxxx[id:2]xxxx  ↓ 置換後の文字列: xxxxxx (<A>タグによるリンク。idが1番のタイトルをDBから参照) xxxx (<A>タグによるリンク。idが2番のタイトルをDBから参照) xxxx 要求している処理順序:  1:文字列中から[id:xxx]を検出して<A>タグに変換  2:id:xxx の xxx部分(数字)を抽出  3:2で得た数字でSQLを実行  4:DBから得た文字列で<A>タグを完成    <A href="test.php?id=(2で得た数字)">(4で得た文字列)</A>  5:以上を[id:xxx]の個数分だけ繰り返し --- スクリプト: // 文字列 $str = "xxxxxx<br>[id:1]<br>xxxx<br>[id:2]<br>xxxx"; // 置換 $result = ereg_replace("\[id:([0-9]+)\]","<a href=\"test.php?id=\\1\">xxx</a>"; ここで、id: の次に続く数字を抽出して その数字を元にDBからデータを引っ張ってこようと思ってます。 // 抽出 $pregresult = preg_match("/[0-9]+/",$result,$match); $id = $match[0]; ここで $id に番号が入り、その番号でSQL文を作成したいのですが 文字列中に[id:xxx]がひとつだけなら正常に動作するのですが 二つ以上存在する場合、$id には最初に検出された数字(上記例では 1 ) しか入ってこないので、二つ目以降のidが認識できず困ってます。 複数の検出・置換対象を順次処理していく方法があれば ご教示いただければ幸いです。 もしくは、他にもっとスマートな方法があるのであれば ご提示いただければ幸いです。 以上、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • phpのpreg_replaceで質問です

    お世話になります phpのpreg_replaceで質問です 下記の様な記述にて文字列の置換をしています $body = preg_replace("/cid:(\d{2,})@(\d{6}).(\d{6})/","/bl/id/$1/",$text); コレを改良してcidの次に入る値で処理を分けたいのですが、うまくいきません。 どなたかご教授お願い致します $arr = array("gif","jpg"."png"); $body = preg_replace("/cid:(\d{2,})@(\d{6}).(\d{6})/","/bl/id/$1/$arr[$1]",$text); 宜しくお願い致します

    • ベストアンサー
    • PHP
  • Perlでの文字列操作について

    Perlを使用しての文字列操作について教えてください。 たとえば以下のような数字とアルファベットが順に並ぶ文字列があるとします。 11A4C555D67B114B9423C アルファベットは1文字ですが、数字は何個でも連続で並びます。 この文字列を「数字アルファベット」の部分で分割し、配列に格納したいのですが、うまくいきません。 @array=('11A','4C','555D','67B','114B','9423C') どなたか教えてください。よろしくお願いいたします。