web-dev-qa-db-ja.com

PHPで空の2D配列を作成しますか?

配列は動的に作成されることを知っています。事前に配列を作成する必要はありませんが、2D配列でどのように行うのでしょうか。同じ方法?

(for$j)
{
for($i)
    {
    $array[j][i] = "data";
    }
}

そんな感じ?もちろん、ループの本物です。

32
Joshua

絶対に最も簡単な場合、2D次元配列は次のように作成できます。

<?php
    $emptyArray = array(array());
?>

またはPHP 5.4のように使用することもできます:

<?php
    $emptyArray = [[]];
?>
47
Brendan Bullen

従来の意味ではなく、PHPで2D配列を作成することはありません。

$a = array(array());に関する上記の提案は、実際には次の配列を作成するだけです。

_$a = array(
    0 => array( )
);
_

したがって、_$a[0][0] = 'test';_は次のようになります。

_$a = array(
    0 => array(
        0 => 'test'
    )
);
_

一見、機能しているように見えますが、実際には、これはまだ2次元配列ではありません。 2番目の行(インデックス1)を使用しようとすると、この時点でPHPは通知をスローします。たとえば:

_$a[1][0] = 'test2';
_

これは、_$a[1]_には何も含まれていないためです(array(array())はインデックス0に配列を作成するだけですか?)。

それが機能するためには、もう一度$a[1] = array();を実行する必要があります。または、できるインデックスを避けたい場合は、$a[] = array();を実行します。


_$a = array(); // array of columns
for($c=0; $c<5; $c++){
    $a[$c] = array(); // array of cells for column $c
    for($r=0; $r<3; $r++){
        $a[$c][$r] = Rand();
    }
}
_

上記のコードは、乱数の5x3「2d配列」を作成します。

21
Christian

PHPドキュメント は、この種の基本的な質問を始めるための良い方法です。

<?php
$arr = array("somearray" => array(6 => 5, 13 => 9, "a" => 42));

echo $arr["somearray"][6];    // 5
echo $arr["somearray"][13];   // 9
echo $arr["somearray"]["a"];  // 42
?>
3

テキストファイルの行を処理するための空の配列を作成する場合は、$ array = array();を使用します。

2

あなたがしようとしていることを指定できますか? foreach関数を使用して多次元配列をループできます

$ary=array( "subarr" => array("foo","bar") );

foreach($ary as $a){
  foreach($a as $ary_sub){
    echo $ary_sub;
  }
}

または

foreach($ary["subarr"] as $key=>$subval){
 echo $subval;
}
2

「array(array())」を使用すると、最初の位置に「空の」要素を持つ2D配列が作成されます。本当に空の2D配列を作成するには、これを削除する必要があります。

<?php
    $emptyArray = array(array());  // Creates a 2D array with one empty element in $emptyArray[0]
    array_pop($emptyArray);        // Pops element[0] off the array
?>
2
// dynamic 2D array

$twoD = array(array());
$val = 0;

// fill the array
for($r = 0; $r < 4; $r++) {
    for($c = 0; $c < 4; $c++) 
        $twoD[$r][$c] = $val++;
}

// print the current value of $val
echo $val."<br/>------------------<br/>";

// print the array  
for($r = 0; $r < 4; $r++) {
    for($c = 0; $c < 4; $c++) 
        echo $twoD[$r][$c];
    echo "<br/>";
}
1
Samcoder

array(array())ネストされた関数または短い配列構文_[[]]_を使用すると、最初の位置にempty要素を持つ2D配列が作成されることに注意してください。これによりエラーが発生する可能性があるため、削除する必要があります。

empty要素を削除するにはどうすればよいですか?

array_pop()メソッドを呼び出して_element[0]_を配列からポップするのは、次のように簡単です。

_<?php
    $a = array(array());
    echo 'Before removing the empty element: \n'
    print_r($a);
    array_pop($a);
    print_r($a);

    $b = [[]];
    echo 'Before removing the empty element: \n'
    print_r($b);
    array_pop($b);
    print_r($b);
?>
_
0
Teocci