echo vs file_put_contents using preg_match_all


echo vs file_put_contents using 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函数删除了文本?

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

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

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

对不起,在我看来,你有一些其他的错误在你的脚本。为了重现错误,我将其简化为"最简单的程序"。这是我得到的:

<?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。第二个将不前进一行,但覆盖当前一行(只是在控制台中,就像在打印机中一样),我怀疑这不是您想要的。