配列要素のキーを宣言し、それを値として定義しないことは可能ですか (非配列変数のように)? このようにして、ブール値の連想配列がある場合、ブール値を割り当てるのではなく、キーが存在するかどうかを確認するだけで済みます。ただし、キーが存在するかどうかを確認するときに、配列を反復処理する必要がないという利点があります。
これは省スペース対策になります。「null」が割り当てられたスペースを取得しているようです。
いいえ。配列要素には常にキーと値がありますが、気にしない場合 (空の文字列など) は何でも値として指定できます。あなたの場合、価値のあるこれらのキーを配列に追加するだけですtrue
。そして、それを探しても見つからない場合は、それが誤りであると想定できます。しかし、一般的に、あなたは間違ったことをしています。ここで実際に保存しているわけではありませんが、コードを不潔にし、読みにくく、維持しにくくしています。こんなことしないで
私が正しく理解していれば。次のような連想配列を使用する予定です。
key value
"bool1" ""
"bool2" ""
"bool3" ""
キーが存在する場合、ブール値は「true」です。
このような通常の配列を使用しないのはなぜですか?:
key value
1 "bool1"
2 "bool2"
3 "bool3"
値が存在する場合、bool は「true」です。
はい、可能です。array_key_exists を使用して、これらの値を確認することもできます。PHP は、変数名のハッシュ マップを実際のデータ ストレージから分離します (興味がある場合は、zval でググってください)。そうは言っても、配列は、各要素に関連付けられた「バケット」構造も持たなければならないという追加のペナルティを支払います。これは、OS とコンパイル オプションによっては、1 あたり 96 バイトにもなる可能性があります。Zvalもそれぞれ48バイトです。
ただし、このスキームから多くの価値が得られる可能性はないと思いますが、純粋に仮説的な観点から言えば、null 値を格納できます。
<?php
$foo = array('a' => null, 'b' => null);
if (array_key_exists('a', $foo))
echo 'a';
ただし、ブール値への初期化と比較すると、これはメモリを節約しません。これにより、array_key_exists への関数呼び出しを行うよりも高速な isset を実行できます。
<?php
$foo = array('a' => true, 'b' => true);
if (isset($foo['a']))
echo 'a';