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

Exploded multidimensional array from long string

我有一个字符串:

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\tInfo 关于 text1\tNumbers 关于 text1\n

字符串来自 $_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 分隔的每一位文本都在一个数组中。

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

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

Eighter 使用 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);