2

以下は私がテストしているコードです -

<?php

error_reporting(E_ALL);

$myarr = array(NULL => "swapnesh", TRUE => 1, 4 => "swap", "swap" => 4, TRUE => NULL, NULL => TRUE );
echo "<pre>";
//var_dump($myarr);
print_r($myarr);
echo count($myarr);

このコードは出力します -

Array
(
    [] => 1
    [1] => 
    [4] => swap
    [swap] => 4
)
4

コードに関する懸念/質問 -

  1. キーとして NULL が値を 1 に変更する理由 (最初のインデックスで) キーとして NULL が 2 回使用されているため、値が上書きされたため、誰かが提案するシナリオを考えることができますが、FALSE でチェックしたので、0 を出力する必要がありますが、値は出力されません。この場合。
  2. 2 番目の値 1 は空白ですが、1 であるはずでした。
  3. カウントは 4 で、私は 5 か 6 だと思っていましたが、最後の 2 つの値がスキップされたため、4 の場合はどのようになっているのかわかりません。

質問する前に関連する検索 -

PHPネットでドキュメントをチェックしたところ、これは関連しているものであることがわかりましたが、私の場合はあまりわかりませんでした。リンク - http://php.net/manual/en/language.types.array.php

EDIT 3 番目のポイントについては、TRUE と NULL が 2 回使用されていると思います。

4

3 に答える 3

3

を使用しprint_rている場合、出力が読みやすくなります。

  1. NULLキーはからに上書きさ"swapnesh"true、の印刷可能な表現trueは1です。
  2. NULLまたfalse、印刷可能な形式で出力を生成しません。
  3. 2つのキーを上書きしているため、カウントは4です。

変数の出力を向上させるには、次を使用しますvar_dump

于 2013-02-24T09:42:47.007 に答える
1

キーとして NULL が値を 1 に変更する理由 (最初のインデックスで) キーとして NULL が 2 回使用されているため、値が上書きされたため、誰かが提案するシナリオを考えることができますが、FALSE でチェックしたので、0 を出力する必要がありますが、値は出力されません。この場合。

PHP はブール値の FALSE を空の文字列として出力します。int に型キャストして「0」を取得します。

2 番目の値 1 は空白ですが、1 であるはずでした。

TRUE はキーとして 2 回も使用されるため、その値は NULL に上書きされ、空の文字列として出力されます。

カウントは 4 で、私は 5 か 6 だと思っていましたが、最後の 2 つの値がスキップされたため、4 の場合はどのようになっているのかわかりません。

配列内の最後の 2 つの値が配列内の既存の値を上書きしているため、カウントが少なくなります。

于 2013-02-24T09:41:08.973 に答える
0

nullおよびtrue有効なキーではありません。キーは、文字列または整数のいずれかです。nulltrueはそれぞれ空の文字列にキャストされます。これは、互いに上書きする1いくつかの空の文字列/キーがあることを意味します。1

自動的にインデックス付けされたキーが必要な場合は、キーをオフのままにします。

$myarr = array("swapnesh", 1, 4 => "swap", "swap" => 4, null, true);
于 2013-02-24T09:40:37.973 に答える