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つの方法:
#データの読み込みと配列($DB)の作成
<?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
コメント
まだコメントがありません


