2012-11-10 26 views
2

我有一個包含用戶信息和站點上Web服務的數組,我可以查詢用戶的狀態(在線/離線)。我想要做的是每隔x秒查詢一次每個用戶的狀態。PHP迭代多維數組 - 每x秒查詢Web服務

大約有10個用戶和belwois數組的例子。我可以改變陣列是需要的。只有我需要手動輸入的是用戶名和全名。我可以從服務器調用的「狀態」。

$users = array 
( 
    "username"=>array("Fullname","Status"), 
    "johndoe"=>array("John Doe","Online"), 
    "janedoe"=>array("Jane Doe","Offline") 
); 

這是URL,我可以用它來查詢該網站的一個例子(查詢只返回用戶狀態(在線或離線):
http://thesite.com:80/webservice/user/用戶名/

這是代碼我可以用它來獲取特定的用戶狀態:

$url = 'http://thesite.com:80/webservice/user/johndoe/'; 
$get = fopen($url, "r"); 
if ($get) { 
    while (!feof($get)) { 
     $state = fgets($get, 4096); 
    } 
    fclose($get); 
} 

echo "User johndoe is: ".$status; 
// Output: User johndoe is: Online 

現在我只需要通過用戶和網站每x秒遍歷幫助s並使用用戶的最後一個數組字段中的每個用戶狀態更新陣列。

請注意,下面我使用php和fopen,因爲這是一個跨域獲取函數,我無法讓ajax/jquery工作。我沒有修改webservice服務器的選項。

謝謝:)

+0

你如何使用該腳本的輸出 - 它是一個CLI或CGI腳本? –

+0

嗨,這是打算在儀表板上使用,我只打算顯示在線用戶的全名。 –

+0

你想每隔x秒更新儀表板,對吧?然後使用JavaScript來每x秒進行部分刷新。 –

回答

1

如果你的$用戶數組不改變,你可以這樣做:

foreach($users as $username=>$userdata) { 
    $url = 'http://thesite.com:80/webservice/user/'.$username.'/'; 
    $get = fopen($url, "r"); 
    if ($get) { 
     while (!feof($get)) { 
      $state = fgets($get, 4096); 
     } 
     fclose($get); 
    } 
    $users[$username][1] = $state; 
} 

如果你可以改變你的$用戶數組是聯想這樣的:

$users = array( 
    "username"=>array("fullname"=>"Fullname","status"=>"Status"), 
    "johndoe"=>array("fullname"=>"John Doe","status"=>"Online"), 
    "janedoe"=>array("fullname"=>"Jane Doe","status"=>"Offline") 
); 

這將讓您使用更多的鍵/值和更安全一點。

+0

這實際上是完美的。有任何機會幫助我用「在線」狀態迴應所有用戶?我想顯示在線用戶的全名。 –

+0

我知道有3種方式來做到這一點: 1.在foreach中回顯它(在我之前發送的代碼片段中) 2.僅在線用戶設置一個新變量 3.用$ users數據運行第二個foreach循環,使用if條件僅迴應在線用戶。 你需要密碼嗎?或者這足夠好? –

2

您需要創建一個每x秒運行一次的cronjob腳本。該腳本應該是對此PHP函數的異步請求。

public function updateUsers(){ 
$users = $_SESSION['users']; 
foreach($users as $username=>$data) { 
    $url = 'http://thesite.com:80/webservice/user/'.$username.'/'; 
    $get = fopen($url, "r"); 
    if ($get) { 
     while (!feof($get)) { 
      $status = fgets($get, 4096); 
     } 
     fclose($get); 
    } 
    $users[$username][] = $status; 
} 
$_SESSION['users'] = $users; 
} 

發佈異步請求的指南。 http://petewarden.typepad.com/searchbrowser/2008/06/how-to-post-an.html

希望它能幫助:)

+0

感謝您指出這一點。今晚晚些時候我會更好地看看這個:) –