从文本文件加载字符串数组

时间:2014-02-13 13:49:14

标签: php arrays

我正在尝试导出位于domains.txt文件中的所有域,这些域与all-urls.txt文件中的链接完全匹配。这是我的剧本:

<?php
if (isset($_POST['submit'])) {
  $badwords = file('domains.txt', FILE_SKIP_EMPTY_LINES);
  $domains = file('all-urls.txt', FILE_SKIP_EMPTY_LINES);
  $newarr = array(); 
  echo '<table>';  
  foreach($badwords as $k=>$v) {
    foreach($domains as $k1=>$v1) {
      if(strpos($v1,$v)!==false) {
        array_push($newarr,$v1);
        $links = array_shift($newarr);
        echo '<tr><td>';
        echo $links;
        echo '</td></tr>';
      }
    }
  }
  echo '</table>';
}
?>
<body>
  <form action="" name="submit">
    <p><label>Ready to submit</label></p>
    <p><input name="submit" type="submit" value ="Go"></p>
  </form>
</body>

而不是$badwords = file('domains.txt', FILE_SKIP_EMPTY_LINES);

我有

$badwords = array('domain1.com', 'domain2.com');

而不是

$domains = file('all-urls.txt', FILE_SKIP_EMPTY_LINES);

我有

$domains = array('domain1.com/url/subfoler.html', 'domain1.com/url/subfoler.html','domain2.com/sublink/otherthings.php');

现在我正在尝试用文件替换数组,因为我更容易加载它们,因为我有大量的域名和网址。 问题是脚本没有以这种形式做任何事情。我错在哪里

3 个答案:

答案 0 :(得分:0)

你怎么知道你实际上已经读过这个文件了?

$badwords = file('domains.txt', FILE_SKIP_EMPTY_LINES);
if ( $badwords === false )
     die ("error on file " . 'domains.txt');

$domains = file('all-urls.txt', FILE_SKIP_EMPTY_LINES);
if ( $domains === false )
     die ("error on file " . 'all-urls.txt');
...

另外,表达式

 array_push($newarr,$v1);
 $links = array_shift($newarr);

完全相同
 $newarr = array();
 $links = $v1;

并使用一些cpu周期完全没有效果......

答案 1 :(得分:0)

发布表单的默认方法是GET,因此如果您没有指定方法,则会使用GET,您将永远不会进入比较文件的部分为:

isset($_POST['submit'])

false

您可以在表单中添加一个方法来解决:

<form action="" name="submit" method="post">

答案 2 :(得分:0)

找到我的答案:

<?php
  $domains = file("domains.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
  $urls = file("all-urls.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
  $newarr = array(); 
  $f = fopen("result.txt", w);
  echo "<table>"; 
  foreach($domains as $k=>$v) {
    foreach($urls as $k1=>$v1) {
      if(strpos($v1,$v)!==false) {
        array_push($newarr,$v1);
        $links = array_shift($newarr);
        echo "<tr><td>";
        echo $links;
        echo "</td></tr>";
        fwrite($f, "$links\r\n");
      }
    }
  }
  echo "</table>";
?>

我需要添加FILE_IGNORE_NEW_LINES,因为网址是新行。