我正在尝试使用全局2d数组,但遇到了一个问题,即如果数组不是[0][x],我就无法填充/读取该数组,这是为什么?
Php代码:
<div id=<?php echo $dagen[$i];?>>
</div>
<div id=<?php echo $dagen[$i]."1"; ?>>
<td align="center">
<form>
<select name =<?php echo $dagen[$i]."1"; ?> id=<?php echo $dagen[$i]."1"; ?> onchange="weekchange(this, '<?php echo $i ?>','<?php echo $teller ?>','<?php echo $project[$i] ?>');savechange('<?php echo $project[$i] ?>','<?php echo $i ?>', this);"/>
<?php
for ($z = 1; $z < 53; $z++)
{
?>
<option value=<?php echo $z ?> <?php if($z == $datum) { echo "selected"; } ?>> <?php echo "week: ".$z ?> </option>
<?php
}
?>
关于函数savechange:
savechange('<?php echo $project[$i] ?>','<?php echo $i ?>', this);
$project[$i]=我的项目名称
$i=项目的位置
this=在这里我从下拉框中取出值。
我将这些变量发送到javascript函数savechange():
var arr = new Array([]);
function savechange(project, i, thisvalue)
{
var x = i;
alert(x);
arr[x][0] = project;
alert(arr[x][0]);
arr[x][1] = thisvalue.value;
alert(arr[x][1]);
}
变量arr是一个全局变量。
当我调用这个函数时,它只有在x的值为0时才起作用。此外,当我看其他例子时,它们也有同样的问题,比如这里:http://jsfiddle.net/BlackSRC/zrnr9/.当我填写1而不是第一个0时,它将不起作用。
var arr = new Array([]);
function savechange(project, i, thisvalue)
{
var x = i;
alert(x);
arr[x] = new Array([]); // Added this one..
arr[x][0] = project;
alert(arr[x][0]);
arr[x][1] = thisvalue.value;
alert(arr[x][1]);
}
http://jsfiddle.net/zrnr9/135/
对于多维数组,您需要初始化每个数组。请参阅我在您的示例基础上创建的此示例:http://jsfiddle.net/x1uyL8va/
因此,在您的代码中,在开始使用arr[x]之前,您需要将其初始化为数组,例如arr[x] = new Array([]);
var arr = new Array([]);
这一行表示您正在创建一个新数组,并将其第一个omly元素设置为新数组。这意味着arr[0]
存在(它是空数组),但不存在arr[1]
。有两种方法可以绕过
-
如果你知道
arr
中应该有多少个元素(看起来$i
是一个循环变量,所以无论最大值是多少),你可以用$i
空数组初始化arr
:var arr = new Array(); for(var i = 0; i < <?php echo $i; ?>; i++) { arr.push([]); }
-
如果你想让它更动态,你可以在需要的时候设置
arr[x]
。这不一定是阵列tho的最佳用途,因为如果他们选择x = 1 then 7 then 203
:,你可能会得到很多间隙function savechange(project, i, thisvalue) { var x = i; alert(x); arr[x] = new Array(); arr[x][0] = project; alert(arr[x][0]); arr[x][1] = thisvalue.value; alert(arr[x][1]); }