2013-03-11 109 views
0

找不到正确的答案,所以希望有人可以提供帮助。基本上想创建一个数组,然后返回搜索结果,例如在PHP中搜索数组并返回结果

$tsql = "SELECT date, staffid, ID,status, eventid, auditid from maincalendar"; 

$params = array(); 
$options = array("Scrollable" => SQLSRV_CURSOR_KEYSET); 
$stmt = sqlsrv_query($conn, $tsql , $params, $options);  
$calarray=array(); 
while($row = sqlsrv_fetch_array($stmt)) { 
    $rowresult = array(); 
    $rowresult["status"] = $row['status']; 
    $rowresult["eventid"] = $row['eventid']; 
    $rowresult["caldate"] = $row['date']; 
    $rowresult["staffid"] = $row['staffid']; 
    $rowresult["ID"] = $row['ID']; 
    $rowresult["auditid"] = $row['auditid']; 
    $calarray[] = $rowresult; 
} 

然后,我会想搜索匹配 'caldate' 和',STAFFID的价值观和返回$ calarray相关条目中

+0

难道你不能改变SQL有'WHERE caldate =? AND/OR staffid =?'? – UnholyRanger 2013-03-11 13:18:01

+0

你知道你可以做$ calarray [] = $ row来保存7行代码吗? xd – aleation 2013-03-11 13:19:05

+0

嗨 - 基本上试图创建一个简单的日历,左边是工作人员列表,然后是从左到右的日期 - 然后我想搜索每个日期,如果工作人员已预订,则在相应的单元格中显示事件。如果我每次为每个单元运行查询,但运行速度很慢,所以查找速度更快的方法。想过如果我可以做一个SELECT语句并将其放入数组,然后每次查询数组可以加快它? – user2156900 2013-03-11 13:19:58

回答

0

我建议以下,

  • 取需要你是显示当前月的所有数据,使用col BETWEEN x AND y
  • 它们添加到PHP中的数组,staffidcaldate关键

就像这样;

$calarray[$row['staffid'] . '-' . $row['date']][] = $row; 

不知道单,STAFFID /日期组合可以每天一个或多个事件,如果不是你可以删除[]

要检查,如果我们为特定的,STAFFID /日期组合有信息,使用isset

if (isset($calarray[$staffid . '-' . $mydate]) { ... } 
+0

这是美丽的!所以如果我想从结果中返回'状态' - 我如何得到这个值?谢谢 – user2156900 2013-03-11 13:35:42

+0

$ calarray [$ staffid。 ' - '。 $ mydate] ['status'],或者如果你使用额外的[]'$ calarray [$ staffid。 ' - '。 $ mydate] [_ index _] ['status'] – hank 2013-03-11 13:38:31

+0

'print_r'和'var_dump'是你的朋友 – hank 2013-03-11 13:38:59

0

试试这个:

$matches = array(); 
$caldate = //your desired date; 
$staffid = //your desired id; 

foreach($calarray as $k => $v){ 
    if(in_array($caldate, $v['caldate']) && in_array($staffid, $v['staffid'])){ 
     $matches[] = $calarray[$k]; 
    } 
} 

$比赛应该是和阵列与你想要的所有结果。


也:

while($row = sqlsrv_fetch_array($stmt)) { 
    $rowresult = array(); 
    $rowresult["status"] = $row['status']; 
    $rowresult["eventid"] = $row['eventid']; 
    $rowresult["caldate"] = $row['date']; 
    $rowresult["staffid"] = $row['staffid']; 
    $rowresult["ID"] = $row['ID']; 
    $rowresult["auditid"] = $row['auditid']; 
    $calarray[] = $rowresult; 
} 

可缩短到:

while($row = sqlsrv_fetch_array($stmt)) { 
    $calarray[] = $row; 
} 
0

也许这个代码snipplet解决您的问题。 我不是一个PHP程序员,所以没有warrenty。

function searchInArray($array, $keyword) { 
    for($i=0;$i<array.length();$i++) { 
     if(stristr($array[$i], $keyword) === FALSE) { 
      return "Found ".$keyword." in array[".$i."]"; 
     } 
    } 
} 
+0

为什么代码格式不好? – FreakyLOL 2013-03-11 13:27:35

+2

你知道有一个原生的php函数可以完成你创建的函数吗? xD http://php.net/manual/en/function.in-array。php – aleation 2013-03-11 13:29:42

+0

哦,是的,谢谢;-) – FreakyLOL 2013-03-13 16:27:08

0

添加索引你要查询的字段,然后将搜索到的SQL查询。您也可以在循环内进行简单的过滤。因此,根据您需要的搜索,您将填充多个数组而不是一个数组。