• 締切済み

値の削除

アドバイスお願いします。 $tmptmp = implode(",", $tmp); for($j = 0; $j < count(tmp); $j++){ if(preg_match("/$haifu/", $tmptmp)){ $target = preg_replace("/{$haifu},?/", "", $tmptmp); echo "target : ".$target."<br>"; $tmptmp = $target; } } // 上のプログラムは // $haifu と $tmptmp が一致するなら一致した$haifuを削除する // $tmptmp == 000000,000001 の場合 // $haifu == 000001 ならば // $tmptmp から $haifu が削除されて // $target == 000000 となる。 また、もし、 // $tmptmp == 000000,000001,000002 // $haifu == 000000 // $target = 000001,000002 となる。問題は$haifuの値が複数存在する場合。 また、新たに$tmptmpが更新されてしまうので削除された値ではなく、最初の$tmptmpと$haifuとの比較になってしまいます。 // $tmptmp == 000000,000001,000002 // $haifu == 000001 // $target = 000000,000002 となってしまう。 目的は、$haifu がいくつ存在しても $tmptmp == 000000,000001,000002 $haifu == 000000 $target == 000001,000002 次に、$targetの値と$haifuを比較して $haifu == 000001 $target == 000002 となるプログラムにしたいのですが、 うまくいきません。アドバイスお願いします。

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

みんなの回答

回答No.2

1です。 >if($haifuが空の時){ >unset($tmp[array_search($haifu,$tmp)]); >print_r($tmp); >} $haifuが空の時じゃなくって空じゃない時ですよね? #$haifusがDBから取ってきた$haifuの集まり foreach ( $haifus as $key=>$haifu ){ unset($tmp[array_search($haifu,$tmp)]); } print_r($tmp); これだけでいけませんか?

回答No.1

$haifuが複数の時の処理はどのようにされてる のでしょう? #$haifuが配列になっていて、ループしてる? あと、配列から要素を削除したい場合は unset()が使えますよ。 unset($tmp[array_search($haifu,$tmp)]); という使い方です。 #当然無ければ削除されません。 ex) $tmp[] = "00000"; $tmp[] = "00001"; $tmp[] = "00002"; $haifu = "00001"; unset($tmp[array_search($haifu,$tmp)]); print_r($tmp); ----- 結果 ------ Array ( [0] => 00000 [2] => 00002 )

maedai
質問者

補足

$haifuはデータベースからとってきて るーぷしています。 if($haifuが空の時){ // $tmp はパラメータ情報 // パラメータ情報からデータベース検索を行っていて // もし、パラメータがデータベース内に存在するならばそのパラメータの情報をを削除していき、残ったものはデータベース内には存在しないということになるので その値をエラーとして表示させる事が目的です。 unset($tmp[array_search($haifu,$tmp)]); print_r($tmp); } プログラムの目的は以上です。 スイマセン・・ なぜか、うまくいきません・・。

関連するQ&A

  • php 指定文字列以降の削除

    phpにて半角スペース以降の文字列を問答無用で削除するというプログラムを作ろうとしてるのですが上手くいきません。 どうすればできますでしょうか? ご教授のほどよろしくお願いいたします。 ---- ソースコード $str = '2017/1/1 10-28'; if (preg_match("/ /", $str)){ $replace = str_replace(' ', '', $str); } echo $replace;

    • ベストアンサー
    • PHP
  • preg_replace 後方参照

    preg_replace関数の外で後方参照を行うことはできないですか? $str = '1234abcde' $str = preg_replace("/^(\d+)/", "", $str); この結果は、$str = 'abcde' ですが、()内の数字つまり1234をpreg_replaceの外で確認するには、 $matches = array(); if(preg_match("/^(\d+)/", $str, $matches)){  $str = preg_replace("/^\d+/", "", $str);  $tmp = $matches[1]; //参照 } という風にpreg_matchと併用するしか方法はないのでしょうか? (  perl でいう $str =~ s/^(\d+)//; $tmp = $1; というようなことをしたい。 )

    • ベストアンサー
    • PHP
  • preg_replace, ereg_replace

    $bodyにはテキストファイルなどから読み込んだ、$dateと言う文字(変数ではない)と、改行を含む文字列。 それで、「$date」を、phpスクリプト上の$dateの値に置換したく、 $tmp = preg_replace("/\$date/s", $date, $body); または、 $tmp = ereg_replace("\$date",$date,$body); としたのですが、どうも置換されません。何がいけないのでしょうか?

    • ベストアンサー
    • PHP
  • タグの中の改行文字を正規表現で削除したい

    たとえば、 <a href="~" target="_blank"> というタグの中の改行文字(\n)を削除する正規表現を教えてください。 ただし、preg_replace_callbackは使わないでください。

    • 締切済み
    • PHP
  • 特定文字列を検索してそれ以外を出力する

    お世話になります。 特定文字列を検索してそれ以外を出力するプログラムを書きたいです。 たとえば $aaa = 111111,222222,333333; $haifu = 111111; preg_match("/$haifu/", $aaa, $haifu_non); 結果 $haifu_non : 111111 となるところを カンマ区切りの$aaaで$haifuと一致しなかった 222222,333333 を受け取るためにはどうしたらよいでしょうか? アドバイスお願いします。

    • ベストアンサー
    • PHP
  • 文字列全体に対する置き換え [正規表現]

    正規表現での文字列全体に対する、マッチ箇所 への置き換えについて、アドバイスをもらえないでしょうか。 parlでいうg修飾子はphpには無く、 例えば、[preg_match]は[preg_match_all]という関数で対応出来ますが、 置き換えを行う[preg_replace]には[preg_replace_all]がありません。 それに類する関数も無いように思います。 これに関して、PHPではどのように対応すれば良いのでしょうか。

    • ベストアンサー
    • PHP
  • preg_match・ereg_replaceの動作について

    preg_matchとereg_matchの動作について調べています。 下記のスクリプトを実行すると、$stringが「代入テスト」となります。 ------------------------------------------- $v_insert = "代入" $string = "{%v_insert}テスト"; while (preg_match("/\{%(.*)\}/U", $string, $match)){ $string = ereg_replace($match[0], $$match[1], $a_subject); } ------------------------------------------- $$match[1]→$($match[1])→$(v_insert)となり、 $match[0]→/\{%(.*)\}/U $match[1]→v_insert $$match[1]→代入 となるのは分かったんですが、なぜ、$match[0]→/\{%(.*)\}/Uで$match[1]がv_insertになるのかが分かりません。 このスクリプトはどのように動き、どのように変数に値が設定されているのでしょうか。

    • ベストアンサー
    • PHP
  • 変数名をプログラム中で作成して値を取り出す方法

    perlで変数名をプログラム中で作成して、その変数の値へアクセスする方法は、どのようにしたらよいのでしょうか? 例えば以下のスクリプトで、var_valueという変数名をプログラムで生成し、その値「12345」を取り出したい、というものです。 ================================ #! /usr/bin/perl $var_value ="12345"; $tmp1 = "var"; $tmp2 = "value"; $tmp3 = $tmp1."_".$tmp2; # $tmp3にvar_valueという文字列を作成              # print "tmp3 is $tmp3";  # 本当は$tmp3自体ではなく、$var_value=12345を取り出したい。。。 ================================ 宜しくお願い致します。

    • ベストアンサー
    • Perl
  • コメント削除のPHPスクリプトの作成

    PHPファイルのコメント部を全て削除するPHPスクリプトを作成しようと思ったのですが、質問させてください。 $string = <<<here こんにちは。 すみません、乱入します。 //use constant DEBUG_TAIL => 2; //use constant DEBUG_LEX => 4; const DEBUG_ADD = 1; /* ダメダメ */ const DEBUG_TAIL = 2; //use constant DEBUG_TIME => 8; const DEBUG_TIME = 8; here; $comment1 = '/\/\/.*/'; $comment2 = '/\/\*+.*\*+\//is'; $string = preg_replace($comment1, '', $string); $string = preg_replace($comment2, '', $string); のようにすれば(ヒアドキュメント部は)一応ブラウザ上ではコメント部は削除されています。 しかし、ファイルを読み込む(例えばfopen()などで1行ずつ読みこんでいく)方法では$comment2など上手くいかないことは目に見えているのですが、正規表現の指定の仕方が貪欲さの指定も含めてイメージできませんでした。 アドバイスを頂けないでしょうか? PHP5.3です。

    • ベストアンサー
    • PHP
  • preg_matchでの コンマ について 

    phpでの正規表現で 「もしも変数$wordへ入力した文字列が Japan's という文字列に一致すれば」というスクリプトを作成しましたが、うまくいきません。 if(preg_match("/japan\'s/i",$word,$match)){ この Japan's における カンマの取り扱いを このケースではどうしたらいいかよくわかりません。 \' としてみましたが、うまくいきません。 なにかアドバイスやヒントがありましたら、よろしくお願いします。 ああでもない、こうでもないとやってみましたが、その過程で 唯一 Japan's にヒットしたのは、次のスクリプトでした。 if($word=="japan\'s") ただし、これは正規表現は使っていないわけですよね。 なにか、自分のローカル環境に問題があるのかと思い、レンタルサーバーに同じものをuploadして試して見ましたが、やはり結果は同じで、ヒットしませんでした。別のパソコンでもやってみましたが、結果は同じでした。 整理しますと、 (preg_match("/japan's/i",$word,$match) ではヒットせず、よって コンマの前に\をつけて(preg_match("/japan\'s/i",$word,$match) としましたが、これもヒットしなかったということになります。 1) (')は正規表現の特殊文字でないはずですから、そのまま使えるはずだと思いましたが、なぜかこれが使えない。 2) しかも、その前にエスケープの \ をつけても、そのエスケープ が効かないのはなぜか。 追記: 最近分かったこと。 おもしろいことに、 'j すると、hitする。でも、j' とするとヒットしない。 ということは、コンマ自体には問題ないのだろうと推測しています。でも、文字の後にコンマがつくと、preg_matchにとって特別な意味を持つ文字列に変わるのではないか。

    • ベストアンサー
    • PHP

専門家に質問してみよう