在php中使用多维数组进行列访问

时间:2009-09-18 19:19:07

标签: php multidimensional-array

我有一个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"

4 个答案:

答案 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'));

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