将查询数据分成几个文件

时间:2013-08-19 20:58:19

标签: php

我想从数据库中获取表,然后按文件中断输出数据(每个文件中有50个条目):list01.txt,list02.txt ...但不知何故,我对如何更有效地破坏数据的问题感到困惑。

if ( $result = $mysqli->query($query) ) {

    icount = 0;
    while ( $row = mysqli_fetch_array($result) ) {
        if ( icount % 50 == 0 ) {
            $snum = int( icount / 50 );
            $filename = 'scripts/spisok'.$snum.'.txt';
            $handle = fopen( $filename, 'w' );
        }
        fwrite( $filename, $row['uname'].';'.$row['email'].'<br />' );
        icount++;
    }

    echo 'ok';
    $result->free();

}

我可以先将$ result分解为50个数组,然后再将它们全部写入?对不起,我是PHP的新手

2 个答案:

答案 0 :(得分:1)

您也可以使用array_chunk

<?php
  if ( $result = $mysqli->query( $query ) ) {
    $data = array();
    while( $row = mysqli_fetch_array( $result ) ) {
      $data[] = $row['uname'].';'.$row['email'];
    }
    $result->free();

    // divide an array into a desired number of split lists
    $chunks = array_chunk( $data, 50 );
    // loop through chunks
    foreach( $chunks as $index => $chunk ) {
      $file   = 'scripts/spisok'.( $index + 1 ).'.txt';
      $chunk  = implode( "<br />", $chunk );
      file_put_contents( $file, $chunk );
      // or
      /*
      $handle = fopen( $file, 'w' );
      fwrite( $handle, $chunk );
      fclose( $handle );
      */
    }
    unset( $data, $chunks );
  }
?>

答案 1 :(得分:0)

除了一些语法错误之外,你所做的事情没有什么特别的错误。

试试这个: -

if ( $result = $mysqli->query($query) ) {

    $icount = 0;
    $handle = NULL;
    while ( $row = mysqli_fetch_array($result) ) {
        if ( $icount % 50 == 0 ) {
            if ( $handle !== NULL ) {
               fclose($handle);
            }
            $snum = int( $icount / 50 );
            $filename = 'scripts/spisok'.$snum.'.txt';
            $handle = fopen( $filename, 'w' );
        }
        fwrite( $handle, $row['uname'].';'.$row['email'].'<br />' );
        $icount++;
    }

    fclose($handle);
    echo 'ok';
    $result->free();

}