-2
<?php
error_reporting(-1);
$a = array('key' => '2');
$a = $a['key'];
var_dump($a);
echo $a['key'], "\n";
?>

コードが空の文字列をスローするか、キーが存在しないという警告をスローすると予想していましたが、コードは 2; を出力します。

PHP 5.3.10-1

Update1 : var_dump と error_reporting を追加します。

出力は

hari@hari-laptop:~$ php run.php  
string(1) "2"  
2  
4

2 に答える 2

6

$a値を保持する文字列です"2"

PHPの文字列は、角かっこを使用して文字にアクセスするためにインデックスを付けることができます。例えば:

$a = "abcde";
echo $a[3];  // This will print 'd'

インデックスが文字列の場合、PHPはそれを整数として解析しようとします。文字列が数値でない場合、解析すると。が返され0ます。したがって、最初の文字を表すゼロ番目のインデックスが使用されます。(PHP 5.4以降では、警告が表示されます)。あなたの場合、$a['any_stuff']=最初の文字=であるため、「2」になります。'2'

PHPマニュアルから:

文字列へのアクセスと文字による変更

文字列内の文字は、のように角かっこを使用して、文字列の後に目的の文字のゼロベースのオフセットを指定することでアクセスおよび変更できます$str[42]。この目的のために、文字列を文字の配列と考えてください。関数substr()substr_replace()は、複数の文字を抽出または置換する場合に使用できます。

PHP 5.4以降、文字列オフセットは整数または整数のような文字列である必要があります。そうでない場合、警告がスローされます。

于 2012-11-08T05:24:24.357 に答える
1

に別の値を選択すると、これはより理にかなっています$a['key']

$a = array('key' => 'whatever');
$a = $a['key'];
var_dump($a);
echo $a['key'], "\n";

出力は次のとおりです。

string(8) "whatever"
w

まず、echoコマンドは実際には関数ではなく、言語構造です。括弧はオプションです。

次に、配列としてアクセスする文字列がある場合、PHP はその文字列を文字の配列として扱います。ただし、無効なキーを渡すと、最初の文字が取得されます。

echo $a[0];    // w
echo $a[1];    // h
echo $a[2];    // a
echo $a[3];    // t
echo $a['invalid_key'];    // w
于 2012-11-08T05:40:15.227 に答える