Php 字符串的数组键始终计算为第一个字符(true)

Php 字符串的数组键始终计算为第一个字符(true),php,Php,当: isset($person['jibberish'])计算结果为FALSE 但是: isset($person['jibberish'])计算结果为TRUE,因为$person['jibberish']返回字符串$person的第一个字符 这是否如预期的那样?这让我今天感到震惊,因为我一直使用empty($array['key'])而从未在if语句中包含is_array() 因为$person是一个字符串,类似数组的索引被转换为int $person = 'bill'; 因此,如果使用随

当:

isset($person['jibberish'])
计算结果为FALSE

但是:

isset($person['jibberish'])
计算结果为TRUE,因为
$person['jibberish']
返回字符串$person的第一个字符


这是否如预期的那样?这让我今天感到震惊,因为我一直使用
empty($array['key'])
而从未在if语句中包含
is_array()

因为
$person
是一个字符串,类似数组的索引被转换为
int

$person = 'bill';

因此,如果使用随机的非数字字符串作为索引,则“自然”获得任何字符串的第一个字符。

因为
$person
是一个字符串,类似数组的索引将转换为
int

$person = 'bill';

因此,如果使用随机的非数字字符串作为索引,则“自然”获得任何字符串的第一个字符。

因为打印的是字符串的未定义索引,而不是数组。 如果您尝试在PHP中打印字符串的索引,则字符串的每个字符都将显示:

(int)'any non-numeric string in the world' == 0

因为您打印的是字符串的未定义索引,而不是数组。 如果您尝试在PHP中打印字符串的索引,则字符串的每个字符都将显示:

(int)'any non-numeric string in the world' == 0

这是一个PHP字符串->int类型转换的非100%明显行为的好例子。试试
$person='bill';var_dump(isset($person['10个绿色瓶子])-请参阅和,以了解为何会出现这种行为。您需要记住的是,您正在处理下面的C字符串,因此所有内容实际上都只是一个字节数组。当类型转换为int时,任何以数字开头的字符串都将成为该数字,因此(int)“10个绿色瓶子”==10;//对。如果不是以数字开头,它将被转换为0。这是PHP字符串->int类型转换的非100%明显行为的一个好例子。试试
$person='bill';var_dump(isset($person['10个绿色瓶子])-请参阅和,以了解为何会出现这种行为。您需要记住的是,您正在处理下面的C字符串,因此所有内容实际上都只是一个字节数组。当类型转换为int时,任何以数字开头的字符串都将成为该数字,因此(int)“10个绿色瓶子”==10;//对。如果它不是以数字开头,它将被强制转换为0。