echo vs file_put_contents使用preg_match_all

时间:2011-11-02 03:20:15

标签: php preg-match-all

<?php

$start_date = "20111101";
$todays_date = date('Ymd');

$html = file_get_contents("http://online.wsj.com/mdc/public/page/2_3021-tradingdiary2-{$start_date}.html?mod=mdc_pastcalendar");

preg_match_all(
'#<td style="text-align:left;padding-top:18px;" valign="bottom" class="colhead">(.*?)</td>#',
    $html,
    $EXCHANGE, 
    PREG_PATTERN_ORDER);  

preg_match_all(
'#<td class="num">(\d.\d\d)</td>#',
    $html,
    $TRIN, 
    PREG_PATTERN_ORDER);  

    echo "{$EXCHANGE[0][0]},    \r";
    echo "TRIN : {$TRIN[0][0]}, \r";
    echo "{$EXCHANGE[0][1]},    \r";
    echo "TRIN : {$TRIN[0][1]}, \r";
    echo "{$EXCHANGE[0][2]},    \r";
    echo "TRIN : {$TRIN[0][2]}, \r";
    echo "{$EXCHANGE[0][3]},    \r";
    echo "TRIN : {$TRIN[0][3]}, \r";

// write this to a file
$WSJData = 'WJSData.csv';
$WriteMe = "{$TRIN[0][0]}, {$TRIN[0][1]}, {$TRIN[0][2]},  {$TRIN[0][3]}";   

file_put_contents($WSJData, $WriteMe );

?>

为什么WSJData.csv中的输出与echo输出不同?为什么我在CSV文件中使用preg_match_all函数获取我删除的文本?

2 个答案:

答案 0 :(得分:0)

如果要将某些echo调用的结果写入文件,请使用:

ob_start(create_function('$a','file_put_contents(FILENAME,$a); return $a;'));
echo ...
echo ...
...
echo ...
ob_end_flush();

这将确保打印的内容是文件中的内容。

答案 1 :(得分:0)

抱歉,在我看来,您的脚本中还有其他一些错误。我把它简化为“最简单的程序”来重现错误。这是我得到的:

<?php

  $TRIN = array( array("E0","E1","E2","E3") );

  echo "TRIN : {$TRIN[0][0]} / ";
  echo "TRIN : {$TRIN[0][1]} / ";
  echo "TRIN : {$TRIN[0][2]} / ";
  echo "TRIN : {$TRIN[0][3]} \n";

  // write this to a file
  $WSJData = 'WJSData.csv';
  $WriteMe = "{$TRIN[0][0]}, {$TRIN[0][1]}, {$TRIN[0][2]}, {$TRIN[0][3]}";   

  file_put_contents($WSJData, $WriteMe );

  echo file_get_contents($WSJData);

输出是:

$ php test.php
TRIN : E0 / TRIN : E1 / TRIN : E2 / TRIN : E3
E0, E1, E2, E3

第一行输出来自回声。第二个来自“file_get_contents”。 替换工作正常。实际上,它在分配变量时发生,而不是在回显或保存到文件时发生。

顺便说一句,我建议使用\ n而不是\ r。第二个不会前进一行,而是覆盖当前的一行(就像在打印机中一样在控制台中),我怀疑那不是你想要的。