php çok boyutlu dizi ile Sütun erişim

4 Cevap php

Ben tamsayılar bir 2-D dizi var. Ben sütun için bunu başlatmak istiyorum, ve sonra satır sırayla erişmek istiyorum. Açıkça her satır üzerinde yineleme olmadan sütun sırayla PHP başlatmak mümkün mü?

Örneğin, R, bir yapabilir

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 Cevap

Ne yazık ki, hayır. PHP tamsayılar A 2-D dizi aslında satır, her satır sütun bir dizi olmanın bir dizi olarak ayarlanır. Siz, teoride böyle bir şey yapabilirsiniz:

 $data[0][1];
 $data[1][1];

ama bu gerçekten sadece yineleme edilir. Bu bir matris R'ın uygulanması gerçek bir oluşturmak için gerçek, çok-boyutlu bir dizi olduğunu, (ve ben R çok az bilgiye sahip, bu yüzden yanılmıyorsam afedersiniz) görünüyor. Onlar gerçekten uyumlu değil.

Ne bu böyle bir şey:

$tab = array(
    array('a', 'b'), // first line
    array('c', 'd'), // second line
);
var_dump($tab);

Size verir:

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)

Sadece bir deyim, ve hiçbir yineleme ;-)

Bu, bir bütün olarak ilan etti ve gerçekten "sütun sütun" oluyor; bir o satır satır beyan söylüyorlar, ve sütuna göre değil sütun olabilir - PHP pek mümkün değil ... Ama sizin ihtiyaçlarınıza uygun görünüyor?

Ben satır için veri girme ve bunları ihtiyaç olarak "sütun" off okumak için bir işlevi yazma öneririm.

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")

Düzenleme: bilgiçlik taslayan olmak istiyorsanız, sütun sırayla veri girmek ve sonra satır sırayla onu okumak için fonksiyon yazabiliriz; Hiç bir sütundaki veri öğeleri sayısını değişir eğer Sizin veri vida olacaktır dışında hiçbir gerçek fark etmez.

Her halükarda, cevap: Hayır, bir yere yineleme zorunda gidiyoruz.

Siz) (array_map kullanarak düşündünüz mü? Örneğin

$my2d = array_map(function($row,$col) {
            $row[1]=$col;return $row;
        }, $my2d, array('a','c'));

Bu bir yineleme, ama iyi ;) gizli