猿问

如何检查默认情况下设置了(int)数组键还是自定义(int)键?

我有一个数组:


$arr = ['item_one', 'item_two'];

默认情况下,这些键是0,1如果我转储该数组,它看起来像这样:


array(2) { [0]=> string(8) "item_one" [1]=> string(8) "item_two" }

我不想将第一个$arr默认密钥设置为,然后确定它是设置而不是自动生成的事实:125


$arr = ['item_one', '25' => 'item_two'];

我试过这个:


foreach($arr as $k => $v){

    if(is_int($k)){

        echo '[' . $k . '] is not a custom key!'.

    }

}

但输出是:


[0] is not a custom key!

[25] is not a custom key!

因为显然两个键都是(int).


我如何获得25不输出该消息的密钥?


翻阅古今
浏览 106回答 2
2回答

四季花海

你可以试试我的代码:$arr = ['item_one', '25' => 'item_two'];$i = 0;foreach($arr as $k => $v){    if($i != $k){        echo '[' . $k . '] is a custom key!';    }    $i++;}

慕桂英4014372

除了一些可能会或可能不会起作用的对象的诡计之外,我能看到的唯一解决方案是让鸭子打字对你有用,而不是对你不利:在数字前面添加一个空格或 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 keyphp >(note:  missed $arr['2'])根据手册:键可以是整数或字符串。该值可以是任何类型。此外,还会发生以下关键转换:包含有效十进制整数的字符串,除非数字前面有 + 号,否则将被强制转换为整数类型。例如,键“8”实际上将存储在 8 下。另一方面,“08”不会被强制转换,因为它不是有效的十进制整数。浮点数也被转换为整数,这意味着小数部分将被截断。例如,密钥 8.7 实际上将存储在 8 下。布尔值也被转换为整数,即键 true 将实际存储在 1 下,键 false 将存储在 0 下。Null 将被转换为空字符串,即键 null 将实际存储在 "" 下。数组和对象不能用作键。这样做会导致警告:非法偏移类型。如果数组声明中的多个元素使用相同的键,则仅使用最后一个,因为所有其他元素都将被覆盖。
随时随地看视频慕课网APP
我要回答