PHP слишком много переменных, чтобы написать - PullRequest
0 голосов
/ 30 сентября 2010

У меня есть следующие коды:

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);

Я хочу сократить скрипт, потому что у меня много переменных $ ContentN, может быть что-то вроде foreach ??

Ответы [ 3 ]

3 голосов
/ 30 сентября 2010

Я бы сделал это так:

$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);

Если вам нужно больше знаменитостей, просто добавьте их в массив.

2 голосов
/ 30 сентября 2010

Примерно так будет очень близко к вашему действительному коду, но не может быть рекомендовано

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

Используются переменные переменные: 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 , потому что вы не хотите, чтобы в текстовом файле были пустые строки.

0 голосов
/ 30 сентября 2010

Вот краткий рефакторинг кода для вас.Обновленные имена переменных, актуальные темы, содержащиеся в массиве, и 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...