PHP中多行文本框如何转换成二维数组?

fisher_older 2009-08-25 08:16:59
有多个文本框,每个文本框有三行,每行有三个元素(相当于一个3*3矩阵),请问如何将矩阵转换成二维数组?能否给个代码?谢谢!
...全文
598 点赞 收藏 32
写回复
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
Study_Work_2009 2009-09-13
ding
回复
fisher_older 2009-09-13
xuzuning大虾的回答比较接近目标,可惜我运行时不成功,是不是代码有哪儿还有问题?
chinmo大虾的回答也很好,但是若能做在一个文件里就更好了。
再次感谢大家伙儿,你们真是好心人,这里的讨论氛围也非常好。相信有很多和我一样的新手都从中获得很多营养。
最好烦请大家帮我完善一下,做一个能运行的简单一点的php网页就行了。再次感谢!我会将分数提到100分的。
回复
13楼的已经是给你答案了吧

运用例子:

test.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
<script language="JavaScript">
<!--
var xmlHttp = false;
try
{
xmlHttp = new XMLHttpRequest();
}
catch (trymicrosoft)
{
try
  {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
  }
catch (othermicrosoft)
{
try
{
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (failed)
{
xmlHttp = false;
}
}
}
if (!xmlHttp){
 alert("Error initializing XMLHttpRequest!");}
function GetResult(value){
if(value){
var value=value.replace(/[\r\n]+/g,"@")
var url="showinfo.php?infovalue="+value;
var linkurl=url;//根据传递过来的变量后台查询
xmlHttp.open("GET",linkurl,true);
xmlHttp.onreadystatechange = callback;//触发callback事件,以判断信息是否正确
xmlHttp.send(null);
}
}
function callback() {

if (xmlHttp.readyState == 4) {
if (xmlHttp.status == 200) {
document.getElementById("showinfo").value=xmlHttp.responseText;//把返回的信息赋给ID为showinfo的DIV
}
}
}
//-->
</SCRIPT>
</head>

<body>
<table>
<tr>
<td>矩阵A:</td>
<td>结果</td>
</tr>
<tr>
<td><textarea name="matrixA" rows="14" cols="42" onblur="GetResult(this.value)"></textarea>
</td>
<td><textarea name="matrixB" rows="14" cols="42" id="showinfo"></textarea>
</td>
</tr>
</table>
</body>
</html>



showinfo.php:

<?php
function foo($v) {
return split(' +', $v);
}
if($_GET['infovalue']) {
$arr = array_map('foo', split("@", trim($_GET['infovalue'])));
}
$result=0;
foreach($arr as $key=>$value){
foreach($value as $key=>$svalue){
$result=$result+$svalue;
}
}
echo $result;
?>
回复
fisher_older 2009-09-12
差不多了,唠叨大虾太牛了。你的意思我明白,可惜我太菜,运行不了。能帮帮我测试一下吗?
回复
xuzuning 2009-09-11
这样写
function colsplit($v) {
return split(chr($_POST['delimiter'])." *", $v);
}
function coljoin($v) {
return join(chr($_POST['delimiter']), $v);
}

$ret = '请输入正确数据';

if($_POST) {
$a = array_map('colsplit', split("[\r\n]+", $_POST['matrixA']));
$b = array_map('colsplit', split("[\r\n]+", $_POST['matrixB']));
if($a && $b) {
$fmt = "%.$_POST[decimals]f";
for($i=0;$i<count($a);$i++) {
for($j=0;$j<count($b[0]);$j++) {
$p = 0;
for($k=0;$k<count($a[0]);$k++)
$p += $a[$i][$k] * $b[$k][$j];
$c[$i][$j] = sprintf($fmt, $p);
}
}
$ret = join("\r\n",array_map('coljoin', $c));
}
}

echo <<< HTML
<form method="post">
<table>
<tr>
<td>矩阵A:</td>
<td>矩阵B:</td>
<td>结果</td>
</tr>
<tr>
<td><textarea name="matrixA" rows="14" cols="42">$_POST[matrixA]</textarea>
</td>
<td><textarea name="matrixB" rows="14" cols="42">$_POST[matrixB]</textarea>
</td>
<td><textarea name="matrixC" rows="14" cols="42">$ret</textarea>
</td>
</tr>
</table>
<br>
分隔符:<select size="1" name="delimiter">
<option value="32">空格</option>
<option value="9">Tabs</option>
<option value="44" selected>逗号</option>
</select>  小数位数:<select size="1" name="decimals">
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3" selected>3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="9">9</option>
<option value="12">12</option>
<option value="15">15</option>
</select>
<br>
<hr>
<input type="submit" value="Multiply A*B" name="GO" title="Multiply">
<br>
<hr>
</form>
HTML;
回复
littlebirds 2009-09-11
不懂。帮顶!
回复
foolbirdflyfirst 2009-09-11
唠叨那个代码有什么问题?不是可以了吗?
回复
YHL27 2009-09-11
路过!学习!!
回复
ms_X0828 2009-09-11
不太清楚
回复
fisher_older 2009-09-11
scshsy的方法固然可行,但是每个元素占用一个文本域。能否将所有的元素都放在一个文本域内?
大家看看下面的例子就知道了。
http://www.bluebit.gr/matrix-calculator/matrix_multiplication.aspx
回复
weifangan 2009-09-11
有心栽花花不成,无意种柳柳成荫,多谢各位,从上面获得灵感,解决了一个困扰了一段时间的问题。
回复
CNCPT01 2009-09-01
个人认为 10 楼正解
回复
骄傲青蛙 2009-08-31
18楼是正解, 回答的人什么都有
回复
fisher_older 2009-08-31
哈哈。难得各位仁兄到现在还没明白我的意思吗?
回复
tony-杨 2009-08-30
太有意思啦
问问题的问得不清不楚
回答的回答得丰富多彩

(__) 
  /oo\\________
  \ /     \---\
  \/    /  \  \
   \\_|___\\_|/  *
    ||  YY|
    ||  ||  
回复
fisher_older 2009-08-29
下周结贴了,都快绝望了
回复
fisher_older 2009-08-29
能说具体一点吗?
回复
select326 2009-08-28
用implode+foreach吧
回复
fisher_older 2009-08-27
感谢各位大虾的帮助。不过我还是没有能够解决问题。主要是因为我需要将文本域转换成二维数组来进行各种运算,所以如何转换成二维数组是关键问题,最后在运算后再将结果存入另外一个文本域。简化一下就是:
1、将文本域a的内容读取并转换成二维数组;
2、将该二维数组存入文本域b。
必须是二维数组,因为还有其他运算要用到,恳请各位大虾再帮帮忙。
再次感谢!人人有分!
回复
xuzuning 2009-08-27
原来是这个要求
<?php
function foo($v) {
return split(' +', $v);
}
if($_POST) {
$d1 = array_map('foo', split(" *[\r\n]+", trim($_POST['d1'])));
}
print_r($d1);
?>
<form method=post>
<textarea name=d1>1.0 2.0 3.0
4.0 5.0 6.0
7.0 8.0 9.0
</textarea>
<br>
<input type=submit value=test>
</form>


Array
(
[0] => Array
(
[0] => 1.0
[1] => 2.0
[2] => 3.0
)

[1] => Array
(
[0] => 4.0
[1] => 5.0
[2] => 6.0
)

[2] => Array
(
[0] => 7.0
[1] => 8.0
[2] => 9.0
)

)
回复
发动态
发帖子
基础编程
创建于2007-09-28

2.1w+

社区成员

从PHP安装配置,PHP入门,PHP基础到PHP应用
申请成为版主
社区公告
暂无公告