php将字符串拆分成二维数组

我想讲一段字符串,格式大概是:“编号”+空格+“数量”+回车+”编号“+”空格“+”数量“+回车…………这样的数据存到二维数组里,最后写入数据库。用php。多方搜索无果,请教大神们如何操作?
数据行数还不一定。有可能是1行 也有可能是10多行。
$str="123 5
456 5
159 6";

数组格式
$order = array
(
"1"=>array
(
"123",
"5"
),
"2"=>array
(
"456".
"5"
),
"3=>array
(
"159",
"6"
)
);

<?php
$str="123 5
456 5
159 6";

function strsToArray($strs,$x) { // 把字符串按指定正则切割为数组
$result = array(); 
$array = array(); 
//把与正则匹配的字符串替换为 @
$strs = preg_replace($x, '@', trim($strs)); 
/* 这里切割字符串,需要注意的是如果字符串中有@
   可以把上下两行这个@改为其他字符串中没有的符号 */
$array = explode('@', trim($strs)); 
foreach ($array as $key => $value) {
$result[] = $value;
}
return $result; 


$test=strsToArray($str,'/\n/'); // 以换行符切割字符串为数组
foreach ($test as $key => $value) { // 遍历数组,再以空格切割字符串为数组
$testb[]=strsToArray($value,'/\s/');
}

echo var_dump($testb);
?>

希望对你有所帮助

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-11-28

数据如果来自文件的话,很好操作,下边给你示例不是来自文件的数据

 <?php
if($_POST){
 $arr=explode("\n",$_POST["test"]);
 $result=array();
 foreach($arr as $data){
  trim($data) && $result[]=explode(" ",$data); //首先要检查$data是否为空
 }
 print_r($result);
}
?> 
<form action="a.php" method="post">
<textarea name="test" style="width:500px;height:200px;"></textarea>
<input type="submit" value="提交" />
</form>

追问

谢谢,结果对了!

&&的作用是什么意思呢 不太懂
是不是如果trim($data) 为FALSE 则$result[]=explode(" ",$data); 就不执行了?
我在网上查trim(空值)的结果为null ,和false一样吗?

$result为什么需要加[] ? $arr就没加
刚才测试 $result没有[] 只显示最后一条数据

追答

trim($data)是用于去除 在表单输入的 多余的回车键,比如输入数据后,多敲了一个回车。&& 就是和的意思,前面是true接着执行后边的语句,&&前只要不是false 0 null这些,后边的都会执行。
$result[]=explode(" ",$data); 这一句是将data按空格分成数组然后存入二维数组$result。$result后有[]表示添加一个数组值。[]里边可以有键,但一般都省略掉等价于$result[$i];

$result是二维数组,$arr是个一维数组

追问

  是不是$result没有[]的话 则每次循环都把之前的内容顶替掉了,因为这是一维数组?
  所以显示最后一条数据?

PS: 算了 不PS了。。。

追答

是的
$result[]表示的是添加一个数据,此处添加的是 一个数组,就形成二维数组咯

本回答被提问者采纳
第2个回答  2013-08-10
要把你想生成的二维数组形式发出来别人才能帮你撒~
array(
0=>array("编号"=>'数量"),
...
)
这一种形式吗?追问

哥,我改完了。你再看看撒……

相似回答