php格式输入数据并将其放入多个数组中

时间:2011-12-05 22:35:18

标签: php

我正在尝试将输入(下面)放入多个数组(或者可能更简单到一个数组中),最后将其导出到mysql表中,输入数据如下:

0 98
77 09
0 12
0 98234

32 0
0 1 
0 0
345 32

34 9
6437 34
789 0
0 0

.
.

34 0

我的简单代码(输入$ run_txt_filter1):

if ( $counted == 64)
{
    echo "line's number:  ".$counted;
    //echo $run_txt_filter1;
    for ($modi = 0; $modi <= 15; $modi++)
    {
        for ($simhi = 1; $simhi <= 4 ; $simhi++)
        {
                $exploded=explode(" ", $run_txt_filter1);
                var_dump($exploded)." \n";
        }

    } 

}

为什么var_dump一直在说0到64的id? (总共应该有64条输入线)。 真正想要实现的是:

array0=(0, 77, 0, 0)
array1=(98, 09, 12, 98234)
array2=(32, 0, 0, 345)
.
.
array30=(0, 12, 0, 34)
array31=(0, 0, 0, 0)

提前致谢

3 个答案:

答案 0 :(得分:1)

尝试将下一行的爆炸分开并为白色空间爆炸。导致你的代码在上面,它读取整个字符串作为一个导致你的程序将它存储在一个数组上。所以到那时它将是一个嵌套循环。 :)

答案 1 :(得分:0)

考虑这个输入:

$in = <<<IN
0 98
77 09
0 12
0 98234

32 0
0 1 
0 0
345 32

34 9
6437 34
789 0
0 0
IN;

这个算法解决了我认为的问题:

$final_array = array();
$offset = 0;
foreach(preg_split("/(\r?\n){2,}/",$in) as $block){
    foreach(preg_split("/(\r?\n)/",$block) as $line){
        foreach(preg_split("/\s+/",$line) as $column => $value){
            if($value=='') continue;
            if(!isset($final_array[$offset+$column])) 
                $final_array[$offset+$column] = array();
            $final_array[$offset+$column][]=$value;
        }
    }
    $offset = count($final_array);
}
print_r($final_array);

答案 2 :(得分:0)

尝试类似于这个的东西,我不确定这是否有用:

输入:

$inputs = "0 98
77 09
0 12
0 98234

32 0
0 1 
0 0
345 32

34 9
6437 34
789 0
0 0

.
.

34 0";

代码:

$run_txt_filter1 = explode("\n", $inputs);

if(count($run_txt_filter1) == 64)
{
 foreach($run_txt_filter1 as $input)
 {
  $exploded = explode(' ', $input);
  print_r($exploded);
 }
}

“\ n”是windows的下一行,但它在linux上的不同之处是它的“\ r \ n”我不确定它是否会起作用你也可以尝试组合

explode("\r\n", $inputs); 

但只是尝试下一行不起作用我认为您可以使用其他方式将每组值分隔用户其他类型的字符,如',',';',':'等: )