電子書籍の厳選無料作品が豊富!

$dataには「0_1_0_・・・」という文字列が入っており、
文字列のn文字目が「1」だったらtrueを返す、という処理を
行いたいのですが。
その際の条件を3つ用意し(例:3文字目、7文字目、11文字目)
それらをAND/OR検索のように条件付したいのです。
例:ANDなら 
3文字目が「1」"且つ"7文字目が「1」"且つ"11文字目が「1」
である場合、といった風になります
さらに、条件は必ず3つあるのではなく、1つや2つでも
可能というようにしたいのです。

当初書きかけのソースを載せましたが文字数オーバーで転載できず
かなり抽象的な質問になってしまいました。
ご教授いただければ幸いです。

A 回答 (3件)

んーと、こんな感じでしょうか。


これならば3つ以上の条件も与えられるかと思います。
また、for を使っていますが、foreach に変えてもいいかと。

# $str : ターゲットの文字列
# $cond : AND=1, OR=0
# $pos : 位置条件のarray
# 結果 : true / false
function check( $str, $cond, $pos ) {
$checks = 0;
$counts = count( $pos );
for( $i = 0 ; $i < $counts ; $i ++ ) {
if( substr( $str, $pos[$i], 1 ) == 1 ) {
$checks ++;
}
}
# AND
if( $cond ) {
if( $checks == $counts ) return( true );
}
# OR
else {
if( $checks ) return( true );
}

return( false );
}
    • good
    • 0
この回答へのお礼

解答ありがとうございます。

文字列にたいして合致することばかり
考えていましたが、設定した条件の数と
合致した数を比較する方法もたしかにありますね。
これだとすぐ実装できそうな気がします。

お礼日時:2006/12/17 22:56

$array = split("_",$data); # 配列に入れる。

_で分けない場合は空白にする。
$check = array('3','7','11'); # チェックする場所
$oa = 1; # or:0 / and:1

$i=0; # フラグ
foreach($check as $c){
if ($array[$c]){
$i++;
}
}
if ($oa) {
if (count(check) == $i) {
# true
}
} else {
if ($i) {
#true
}
}
    • good
    • 0
この回答へのお礼

解答ありがとうございます。

配列に文字列を区切っていれるという手も
ありますね。substrとどちらが良いか検討して
みます。

お礼日時:2006/12/17 22:48

あんま正規表現得意じゃないですけど、こんな感じですか?



<?PHP
$str="0_1_0_1_0_1_0_0_0_0_0_0_0_0_0";
print preg_match("/^.{2}1.{3}1.{3}1/",$str);
?>
    • good
    • 0
この回答へのお礼

解答ありがとうございます。

常に○番めだと決まっているような場合ならば
提示していただいた方法でも良いかもしれませんね。

お礼日時:2006/12/17 22:53

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