2010-09-30 63 views
0

我有以下代碼:PHP變量太多寫

require("class.XMLHttpRequest.php"); 
function hot($news){ 
    $url="https://localhost/search.aspx?search=".$news.""; 
$ajax=new XMLHttpRequest(); 
$ajax->setRequestHeader("Cookie","Cookie: host"); 
$ajax->open("GET",$url,true); 
$ajax->send(null); 
if($ajax->status==200){ 
    $rHeader=$ajax->getResponseHeader("Set-Cookie"); 
    if(substr_count($rHeader, "Present!")>0) { return true; } 
}else{ return false; } 
} 

$content1= hot("britney") ? "britney found" : ""; 
$content2= hot("gaga") ? "gaga found" : ""; 
$content3= hot("carol") ? "carol found" : ""; 

$filename = 'result.txt'; 
$handle = fopen($filename, 'a'); 
fwrite($handle, "$Content1\r\n"); 
fwrite($handle, "$Content2\r\n"); 
fwrite($handle, "$Content3\r\n"); 
fwrite($handle, "$Content4\r\n"); 
fclose($handle); 

我想縮短腳本cuz我有很多$ ContentN變量 也許類似的foreach?

回答

3

我會做這樣的:

$celebrities = array('britney','gaga','carol'); 
$filename = 'result.txt'; 
$handle = fopen($filename, 'a'); 

foreach($celebrities as $celebrity) 
{ 
    if(hot($celebrity)) { fwrite($handle, "{$celebrity}\r\n"); } 
} 

fclose($handle); 

如果你需要更多的名人,只是將它們添加到陣列。

+0

我在這兩種情況下都有空格 – adam 2010-09-30 13:05:31

+0

是的,對不起。但在他的情況下,測試更容易。 'if(hot($ celebrity))fwrite($ handle,「{$ celebrity} found \ r \ n」);'不再有空格。 – 2010-09-30 13:07:51

+0

如果你不想空行,它更容易...更新我的答案。 (謝謝Loïc) – Mischa 2010-09-30 13:15:41

2

這樣的事情將是非常接近你的實際代碼,但

for($i = 1 ; $i <= 4 ; $i++) 
fwrite($handle, "${Content$i}\r\n"); 

它使用可變的變量可能不被recomanded:http://php.net/manual/en/language.variables.variable.php

這裏不是最好的解決辦法:你爲什麼不只需使用一個數組?

$content[1]= hot("britney") ? "britney found" : ""; 
$content[2]= hot("gaga") ? "gaga found" : ""; 
$content[3]= hot("carol") ? "carol found" : ""; 
for($i = 1 ; $i <= 4 ; $i++) 
fwrite($handle, $Content[$i]."\r\n"); 

或者以前更好,使用captaintokyo的解決方案,因爲你可能不希望在文本文件中的空行。

+1

-1建議變量變量 +2暗示的數組 – mattbasta 2010-09-30 12:53:27

+0

這就是爲什麼我建議他使用數組。存在變量變量,結果更接近他的使用數組的代碼:我首先嚐試儘可能接近他的代碼,然後我建議使用數組,這是在這裏使用它的好方法。 – 2010-09-30 12:55:05

+0

是的!有用!非常感謝 – adam 2010-09-30 12:58:13

0

下面是一個簡短的代碼重構你。更新的變量名稱,數組中保存的趨勢主題以及您詢問的foreach。代碼未經測試。

require("class.XMLHttpRequest.php"); 

$result_filename = 'result.txt'; 

$hot_topics = array(
    'britney', 
    'gaga', 
    'carol' 
); 

$handle = @fopen($result_filename, 'a+'); 
if (!$handle) { 
    exit("Unable to open $result_filename"); 
} 

foreach($hot_topics as $topic) { 
    if (is_hot($topic)) { 
    fwrite($handle, "$topic found\r\n"); 
    } 
} 

fclose($handle); 

exit("\ncomplete"); 

function is_hot($news) { 
    $url = "https://localhost/search.aspx?search=".$news; 

    $ajax = new XMLHttpRequest(); 
    $ajax->setRequestHeader("Cookie", "Cookie: host"); 
    $ajax->open("GET", $url, true); 
    $ajax->send(null); 

    if ($ajax->status == 200) { 
    $rHeader = $ajax->getResponseHeader("Set-Cookie"); 
    if (substr_count($rHeader, "Present!") > 0) { 
     return true; 
    } 
    } 
    return false; 
} 
+0

它打印注意到文件 – adam 2010-09-30 13:21:32

+0

嘗試在foreach循環內添加一個打印$ topic語句,首先在if(is_hot())之前,然後在該條件之內以確保它正常工作。之後,嘗試在is_hot()函數中添加print $ rHeader。這會讓你看到返回的信息。是否有機會不寫任何文件,因爲沒有任何內容是「熱」的? – Craig 2010-09-30 13:36:41