从长字符串中分解出多维数组

时间:2015-02-08 11:18:11

标签: php arrays string multidimensional-array explode

我有一个字符串:

Some text1    Info about text1     Numbers about text1  
Some text2    Info about text2     Numbers about text2  
Some text3    Info about text3     Numbers about text3

每一行当然以\n结尾,每个文本位用\t分隔。这是我无法改变的。

即。关于text1 \ n

的text1 \ tNumber的一些text1 \ tInfo

该字符串来自$ _POST(),然后我想爆炸这个,以便我可以保存每个数据库中每一行的每个部分。

我的代码:

$sigs = $_POST['allSigInput'];

$strings = explode ("\n", $sigs);
$sigCount = count($strings);

var_dump($strings);

foreach($strings as $string) {
    for($c=0; $c<=$sigCount; $c++) {
        ${'sigArr_'.$c} = explode ("\t", $string);
    }
}

这会使字符串爆炸但是var_dump();对于所有$ sigArr_#是相同的,并保存最后一个数组。

所以所有3个输出都是相同的:

array (size=3)
  0 => string 'Some Text3'
  1 => string 'Info about text3'
  2 => string 'Numbers about text3'

我当然希望3个数组分别包含每行文本的信息并进行分解,以便\t分隔的每个文本都在一个数组中。

1 个答案:

答案 0 :(得分:0)

我不确定你希望如何存储数据,但我认为你在这里有一个额外的循环。

foreach($strings as $string) {
    for($c=0; $c<=$sigCount; $c++) {
        ${'sigArr_'.$c} = explode ("\t", $string);
    }
}

使用foreachfor,以便循环通过strings数组。

for循环中的测试条件错误

for($c=0; $c<=$sigCount; $c++)

应该是

for($c=0; $c<$sigCount; $c++)

假设您希望使用for循环,那么您的代码将变为

//foreach($strings as $string) {
    for($c=0; $c<$sigCount; $c++) {
        ${'sigArr_'.$c} = explode ("\t", $strings[$c]);
    }
//}

然后你可以用

看到输出正确
var_dump($sigArr_0);
var_dump($sigArr_1);