php中多维数组的列访问

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

我有一个二维整数数组。我想按列顺序初始化它,然后按行顺序访问它。是否可以在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"

不幸的是,不是。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()吗?例如


这是一个迭代,但隐藏得很好;)

这是按行顺序初始化,这正是我试图避免的。:)这是按行顺序初始化,这正是我试图避免的。:)这与我所寻找的相反,即按列顺序初始化和按行顺序读取。这与我所寻找的相反,即按列顺序初始化和按行顺序读取。这也证实了我的印象。我一直希望被证明是错的!这也证实了我的印象。我一直希望被证明是错的!