2 回答

TA贡献1811条经验 获得超5个赞
你可以试试我的代码:
$arr = ['item_one', '25' => 'item_two'];
$i = 0;
foreach($arr as $k => $v){
if($i != $k){
echo '[' . $k . '] is a custom key!';
}
$i++;
}

TA贡献1871条经验 获得超13个赞
除了一些可能会或可能不会起作用的对象的诡计之外,我能看到的唯一解决方案是让鸭子打字对你有用,而不是对你不利:
在数字前面添加一个空格或 0。然后它将是 key " 25"or中的字符串"025",但如果您将其用作数字或将其转换为其他地方的整数,它将转换为整数。
php > $arr = ['item_one', '025' => 'item_two'];
php > foreach($arr as $k => $v) {
php { if(is_int($k)) {
php { echo '['.$k.'] is not a custom key!';
php { }
php { }
[0] is not a custom key!
php >
简单地将键与元素内的位置进行比较是不可靠的:
php > $arr = ['item_one','25'=>'item_two','2'=>'item_three'];
php > $i=0;
php > foreach($arr as $k=>$v) {
php { if($i != $k) {
php { echo '['.$k.'] is a custom key';
php { }
php { $i++;
php { }
[25] is a custom key
php >
(note: missed $arr['2'])
根据手册:
键可以是整数或字符串。该值可以是任何类型。
此外,还会发生以下关键转换:
包含有效十进制整数的字符串,除非数字前面有 + 号,否则将被强制转换为整数类型。例如,键“8”实际上将存储在 8 下。另一方面,“08”不会被强制转换,因为它不是有效的十进制整数。
浮点数也被转换为整数,这意味着小数部分将被截断。例如,密钥 8.7 实际上将存储在 8 下。
布尔值也被转换为整数,即键 true 将实际存储在 1 下,键 false 将存储在 0 下。Null 将被转换为空字符串,即键 null 将实际存储在 "" 下。
数组和对象不能用作键。这样做会导致警告:非法偏移类型。
如果数组声明中的多个元素使用相同的键,则仅使用最后一个,因为所有其他元素都将被覆盖。
- 2 回答
- 0 关注
- 105 浏览
添加回答
举报