2013-03-11 114 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查詢。您也可以在循環內進行簡單的過濾。因此,根據您需要的搜索,您將填充多個數組而不是一個數組。