我有一个2-D整数数组。我想按列顺序初始化它,然后按行顺序访问它。是否可以按列顺序在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 statement
print(my2d[1,]) # returns "a" "b"
print(my2d[2,]) # returns "c" "d"
答案 0 :(得分:0)
不幸的是,没有。 PHP中的2-D整数数组实际上是作为行数组设置的,每行是一个列数组。理论上你可以这样做:
$data[0][1]; $data[1][1];
但这只是迭代。似乎(我对R的知识很少,所以请原谅我,如果我是正确的),R的矩阵实现是一个真实的,真实的形式,多维数组。他们真的不兼容。
答案 1 :(得分:0)
这样的事情:
$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中是不可能的......但它似乎符合您的需求?
答案 2 :(得分:0)
我建议按行顺序输入数据并编写一个函数来根据需要读取“列”。
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")
编辑:如果你想要迂腐,你可以编写函数来按列顺序输入数据,然后按行顺序读取它;它没有什么区别,只要你改变一列中的数据项数量就会搞砸你的数据。
无论如何,答案是:不,你将不得不迭代。
答案 3 :(得分:0)
您是否考虑过使用array_map()?例如。
$my2d = array_map(function($row,$col) {
$row[1]=$col;return $row;
}, $my2d, array('a','c'));
这是一个迭代,但隐藏得很好;)