2d数组仅在以[0][x]开头时有效


2d array only works if starts with [0][x]

我正在尝试使用全局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]。有两种方法可以绕过

  1. 如果你知道arr中应该有多少个元素(看起来$i是一个循环变量,所以无论最大值是多少),你可以用$i空数组初始化arr

    var arr = new Array();
    for(var i = 0; i < <?php echo $i; ?>; i++) {
      arr.push([]);
    }
    
  2. 如果你想让它更动态,你可以在需要的时候设置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]);
    }