解決済

clip!clip!
Ads By Google

ID Group Name
0 A0 XXX
1 A1 AAA
2 A1 BBB
3 A2 CCC
4 A2 DDD
5 A3 EEE
6 A3 FFF
というデータがあり

とした場合:
0A0XXX
中略
6A3FFF

test.php?group=A2とした場合は
3A2CCC
4A2DDD
test.php?ID=1とした場合は1A1AAA
test.php?name=BBBとした場合は2A1BBBと返答し
test.php?group=A2andID=1とした場合は「該当データなし」と
返答させたいのですがtest.php、test.php?group=A1、test.php?ID=1は返すことが出来ましたがtest.php?name=BBBとした時と複数のパラメータを定義したときだけ返答できません

<?
$datas=Array(
Array("ID"=>"0","Group"=>"A0","Name"=>"XXX")
,Array("ID"=>1,"Group"=>"A1","Name"=>"AAA")
,Array("ID"=>2,"Group"=>"A1","Name"=>"BBB")
,Array("ID"=>3,"Group"=>"A2","Name"=>"CCC")
,Array("ID"=>4,"Group"=>"A2","Name"=>"DDD")
,Array("ID"=>5,"Group"=>"A3","Name"=>"EEE")
,Array("ID"=>6,"Group"=>"A3","Name"=>"FFF")

);

$g = $_REQUEST["group"];
$i = $_REQUEST["ID"];
$n = $_REQUEST["Name"];

foreach($datas as $data){

if(($g == "" AND $i == "") OR $g == $data["Group"] OR $i == $data["ID"] OR $n == $data

["Name"]){
  echo $data["ID"].$data["Group"].$data["Name"]."<br>";
 }elseif($g == $data["Group"] AND $i == $data["ID"]){
  echo "該当データなし";
 } 
}
?>

どのように定義すればよいのでしょうか?
よろしくお願いします

2008-12-17 00:06の質問
この質問と回答を読んで役に立った場合は「役に立つ質問」に投票してください。投票が多い質問は、役に立つ質問一覧に掲載され、より多くの人に見てもらうことができます。

回答(2)

1.

2008-12-17 05:34:31ベスト
1つの方法:
<?php
class Member {
    var $id;
    var $group;
    var $name;

    function __construct($id, $group, $name){
        $this->id = $id;
        $this->group = $group;
        $this->name = $name;
    }
    function match($field, $value){
        return $this->$field == $value;
    }
    function __toString(){
        return "$this->id$this->group$this->name";
    }

    static function select($db, $key, $value){
        $ret = array();
        foreach($db as $rec){
            if($rec->match($key, $value)){
                $ret[] = $rec;
            }
        }

        return $ret;
    }
}

#テストデータ
#ID Group Name
$data_str=<<<EOD
0 A0 XXX
1 A1 AAA
2 A1 BBB
3 A2 CCC
4 A2 DDD
5 A3 EEE
6 A3 FFF
EOD;

#データの読み込みと配列($DB)の作成
define("CR", "\r\n");//環境によっては"\n"かも?

$data = split(CR, $data_str);

foreach($data as $rec){
    list($id, $group, $name) = split(' ', $rec);
    $DB[]=new Member($id, $group, $name);
}

# 使用法サンプル
# ID=1
$results = Member::select($DB, "id", 1);//結果は配列

$str = "$results[0]";//id による検索なので、結果は1つ
echo "$str\n";

# NAME=BBB
$results = Member::select($DB, "name", "BBB");//名前は同じのがあるかもしれない
foreach($results as $rec){
    echo $rec,"\n";
}

# GROUP=A2
$results = Member::select($DB, "group", "A2");//同じのがあると想定される
foreach($results as $rec){
    echo $rec,"\n";
}
# GROUP=A2 and ID=3
$results = Member::select($DB, "group", "A2");//同じのがあると想定される
$results = Member::select($results, "id", 3);//1つしかないはず
echo $results[0],"\n";

# GROUP=A2 and ID=1
$results = Member::select($DB, "group", "A2");//同じのがあると想定される
$results = Member::select($results, "id", 1);//1つしかないはずだが・
if($results){
    echo $results[0],"\n";
} else {
    echo "該当データなし";
}

?>
回答レベル : アドバイス

御礼が遅くなり申し訳ありませんでした

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

2.

2008-12-17 06:28:53
方法2(本命?):
function match($rec, $id, $group, $name){
    return ($id == ""    OR $rec["ID"]    == $id) AND
           ($group == "" OR $rec["Group"] == $group) AND
           ($name == ""  OR $rec["Name"]  == $name);
}

$find="";
foreach($datas as $data){
    if(match($data, $i, $g, $n)){
        $find=$data["ID"].$data["Group"].$data["Name"];
        echo $find,"<br>\n";
    }
}
if($find == ""){
  echo "該当データなし";
}
回答レベル : アドバイス
Ads By Google

コメント

まだコメントがありません

トラックバック(2)

トラックバックURL: