将字符串(列表)转换为数组,然后在多行中输出到csv

时间:2011-10-17 18:10:38

标签: php csv

我必须安排网站列表,以便更有效地处理更新。

为此,我在其他地方生成一个列表(必须采用我将呈现的格式)将其转换为数组以轻松滚动项目,尽管只有在我首先对列表进行洗牌后才能完成,所以我可以随机选择从该列表中取出30个不同的站点并将它们写入.CSV列(希望如此),然后冲洗并重复,即迭代回到ArrayIterator的最后位置并从那里取出,直到列表结束,我的目标是每次写入30个站点放在.CSV文件中的自己的列中。

到目前为止,我无法让它发挥作用。其余的CSV部分很好,但在CSV上它们都显示如下:

site1.com
site2.com
.
.
.
site1000.com 

应该是:

site1.com            site31.com      site62
site30.com           site61.com      site92.com

我一直在寻找这个...有人可以检查出来或者投入几行来完成这个脚本..我认为对于一些经验丰富的人来说这不应该是一件大事。

<?php
$list = 'site1.com
site2.com
.
.
.
site1000.com ';

$Sites = explode("\n",$list);
$Sites = preg_replace('/\s+/','',$Sites);
shuffle($Sites);
$Array_size = count($Sites);
foreach ($Sites as $U_val){
    $D++;
}
echo $D;
echo '<br><hr>';
$Sites = new NoRewindIterator(new ArrayIterator($Sites));
$i =0;
for($R=0;$R<=$D;$R++){
    Run($Sites);
}   
function Run($array){
    $fp = fopen('S_list.csv', 'a+');
    foreach ($array as  $val){
    $amount_to_run = 20;
    $i++;
    if($i<=$amount_to_run){
        $Write = explode("\n",$val);
        $Write = preg_replace('/\s+/','',$Write);
        fputcsv($fp, $Write);
    } else{
        echo '<br><hr>';
        break;
    }
    close($fp);
}
?>

1 个答案:

答案 0 :(得分:0)

# args

/** 
 * List of sites
 * @var string 
 */
 $sSites = '...';

 $nChunkSize = 30;

 $sTargetFileName = 'target.csv'; 

 # code

 $aSites = array_map('trim', explode("\n", $sSites));

 $aResult = array();

 shuffle($aSites);

 foreach (array_chunk($aSites, $nChunkSize) as $aRow){

   $aResult[] = implode(',',$aRow);

 } // foreach

 file_put_contents($sTargetFileName, implode(PHP_EOL, $aResult));