php中多维数组的列访问
我有一个二维整数数组。我想按列顺序初始化它,然后按行顺序访问它。是否可以在PHP中按列顺序初始化,而不显式地迭代每一行 例如,在R中,一个人可以php中多维数组的列访问,php,multidimensional-array,Php,Multidimensional Array,我有一个二维整数数组。我想按列顺序初始化它,然后按行顺序访问它。是否可以在PHP中按列顺序初始化,而不显式地迭代每一行 例如,在R中,一个人可以 my2d = matrix(nrow=2, ncol=2) # create 2x2 matrix my2d[,1] = c("a","c") # initialize column 1 in a single statement my2d[,2] = c("b","d") # initialize column 2 in a single st
my2d = matrix(nrow=2, ncol=2) # create 2x2 matrix
my2d[,1] = c("a","c") # initialize column 1 in a single statement
my2d[,2] = c("b","d") # initialize column 2 in a single statement
print(my2d[1,]) # returns "a" "b"
print(my2d[2,]) # returns "c" "d"
不幸的是,不是。PHP中的二维整数数组实际上被设置为一个行数组,每一行都是一个列数组。理论上,你可以这样做: $data[0][1]; $data[1][1]; $data[0][1]; $data[1][1];
但这实际上只是迭代。看起来(我对R知之甚少,如果我是对的,请原谅),R对矩阵的实现是一个实际的、真实的、多维数组。它们确实不兼容。不幸的是,不兼容。PHP中的二维整数数组实际上设置为行数组,每行都是列数组。理论上,你可以这样做: $data[0][1]; $data[1][1]; $data[0][1]; $data[1][1];
但这实际上只是迭代。看起来(我对R知之甚少,如果我是对的,请原谅),R对矩阵的实现是一个实际的、真实的、多维数组。它们确实不兼容。像这样的东西怎么样:
$tab = array(
array('a', 'b'), // first line
array('c', 'd'), // second line
);
var_dump($tab);
这给了你:
array
0 =>
array
0 => string 'a' (length=1)
1 => string 'b' (length=1)
1 =>
array
0 => string 'c' (length=1)
1 => string 'd' (length=1)
只有一条语句,没有迭代;-)
它是作为一个整体声明的,而不是真正的“逐列”;有人可能会说它是逐行声明的,而不是逐列声明的——这在PHP中是不太可能的。。。但它似乎适合你的需要?像这样的东西怎么样:
$tab = array(
array('a', 'b'), // first line
array('c', 'd'), // second line
);
var_dump($tab);
这给了你:
array
0 =>
array
0 => string 'a' (length=1)
1 => string 'b' (length=1)
1 =>
array
0 => string 'c' (length=1)
1 => string 'd' (length=1)
只有一条语句,没有迭代;-)
它是作为一个整体声明的,而不是真正的“逐列”;有人可能会说它是逐行声明的,而不是逐列声明的——这在PHP中是不太可能的。。。但它似乎适合您的需要?我建议按行顺序输入数据,并编写一个函数,根据需要读取“列”
function col($arr, $offs) {
$t = array();
foreach($arr as $row)
$t[]= $row[$offs];
return $t;
}
$my2d = array();
$my2d[]= array("a", "c");
$my2d[]= array("b", "d");
print(col($my2d,0)); // returns array("a","b")
print(col($my2d,1)); // returns array("c","d")
编辑:如果你想学究化,你可以编写函数,按列顺序输入数据,然后按行顺序读取;它并没有真正的区别,只是如果你改变一列中数据项的数量,它会把你的数据搞砸
在任何情况下,答案都是:不,你必须在某个地方进行迭代。我建议按行顺序输入数据,然后编写一个函数,根据需要读取“列”
function col($arr, $offs) {
$t = array();
foreach($arr as $row)
$t[]= $row[$offs];
return $t;
}
$my2d = array();
$my2d[]= array("a", "c");
$my2d[]= array("b", "d");
print(col($my2d,0)); // returns array("a","b")
print(col($my2d,1)); // returns array("c","d")
编辑:如果你想学究化,你可以编写函数,按列顺序输入数据,然后按行顺序读取;它并没有真正的区别,只是如果你改变一列中数据项的数量,它会把你的数据搞砸
在任何情况下,答案都是:不,您将不得不在某个地方进行迭代。您是否考虑过使用array_map()?例如
这是一个迭代,但隐藏得很好;) 您考虑过使用array_map()吗?例如
这是一个迭代,但隐藏得很好;) 这是按行顺序初始化,这正是我试图避免的。:)这是按行顺序初始化,这正是我试图避免的。:)这与我所寻找的相反,即按列顺序初始化和按行顺序读取。这与我所寻找的相反,即按列顺序初始化和按行顺序读取。这也证实了我的印象。我一直希望被证明是错的!这也证实了我的印象。我一直希望被证明是错的!