2D配列を作成する最も簡単な方法は何ですか。私はこれに似たことができることを望んでいました:
declare int d[0..m, 0..n]
回答:
配列のインデックスを指定することにより、連想配列、または「ハッシュテーブル」のような配列を作成することもできます。
$array = array(
0 => array(
'name' => 'John Doe',
'email' => 'john@example.com'
),
1 => array(
'name' => 'Jane Doe',
'email' => 'jane@example.com'
),
);
これは
$array = array();
$array[0] = array();
$array[0]['name'] = 'John Doe';
$array[0]['email'] = 'john@example.com';
$array[1] = array();
$array[1]['name'] = 'Jane Doe';
$array[1]['email'] = 'jane@example.com';
以下は同等であり、2次元配列になります。
$array = array(
array(0, 1, 2),
array(3, 4, 5),
);
または
$array = array();
$array[] = array(0, 1, 2);
$array[] = array(3, 4, 5);
宣言するだけ?する必要はありません。変数が存在することを確認してください:
$d = array();
配列は動的にサイズ変更され、存在しない要素に何かを書き込もうとするとそれが作成されます(必要に応じて配列全体が作成されます)
$d[1][2] = 3;
これは、事前の宣言のない任意の数の次元に有効です。
count
、たとえばcount($d[1])
、私があなたのポイントを誤解していない限り、正しい次元で使用できますか?
まず、PHPには多次元配列がなく、配列の配列があります。
次に、それを行う関数を書くことができます:
function declare($m, $n, $value = 0) {
return array_fill(0, $m, array_fill(0, $n, $value));
}
これを行うための組み込みのphp関数がないことを私が知っている限り、ループまたは@Amberによる回答でinidcatedされたarray_fillのようなものを再帰的に呼び出すカスタムメソッドを介して行う必要があります。
私はあなたが空であるが初期化された配列の配列を作成したという意味だと思います。たとえば、次のような3つの配列の配列の最終的な結果が必要です。
$final_array = array(array(), array(), array());
これはコードを手作業で書くのは簡単ですが、3つの配列の3つの配列の配列のような任意のサイズの配列の場合、使用前に初期化するのが複雑になります。
$final_array = array(array(array(), array(), array()), array(array(), array(), array()), array(array(), array(), array()));
...等...
欲求不満を感じる。エラーをチェックしたりスローしたりせずに、初期化された配列の配列を任意の深さで宣言する簡単な方法があると便利です。
atliの回答は、これを理解するのに本当に役立ちました。2次元配列を反復処理する方法の例を次に示します。このサンプルは、配列の既知の名前の値を見つける方法と、そこにあるすべてのフィールドをたどるforeachを見つける方法を示しています。誰かのお役に立てば幸いです。
$array = array(
0 => array(
'name' => 'John Doe',
'email' => 'john@example.com'
),
1 => array(
'name' => 'Jane Doe',
'email' => 'jane@example.com'
),
);
foreach ( $array as $groupid => $fields) {
echo "hi element ". $groupid . "\n";
echo ". name is ". $fields['name'] . "\n";
echo ". email is ". $fields['email'] . "\n";
$i = 0;
foreach ($fields as $field) {
echo ". field $i is ".$field . "\n";
$i++;
}
}
出力:
hi element 0
. name is John Doe
. email is john@example.com
. field 0 is John Doe
. field 1 is john@example.com
hi element 1
. name is Jane Doe
. email is jane@example.com
. field 0 is Jane Doe
. field 1 is jane@example.com
そして私にとって、配列をスパースにするべきかどうかについての議論はコンテキストに依存します。
たとえば、$ a [6] [9]が入力されていない場合は、$ a [6] [9]に ""または0などが入力されているのと同じです。
$r = array("arr1","arr2");
単一の配列要素をエコーするには、次のように記述します。
echo $r[0];
echo $r[1];
出力は次のようになります: arr1 arr2