数组索引为小数(double类型或float类型)的陷阱

<?php
// 报告所有错误
ini_set('display_errors', 'On');
error_reporting(-1);

$arr = ['a', 'b', 'c', 'd', 'e'];

// 错误写法(会报Deprecated错误):
// Deprecated: Implicit conversion from float 2.999999 to int loses precision
var_dump($arr[2.999999]); // string(1) "c"

// 正确写法(手动转换类型,避免发生隐式转换):
// var_dump($arr[(int)2.999999]); // string(1) "c"

//========== 总结 ==========
// 1、数组索引使用小数会报Deprecated错误,提示发生隐式转换(float转为int,不四舍五入直接丢弃小
//    数部分)导致丢失精度,解决这个Deprecated错误的办法就是手动转换类型,避免发生隐式转换。

Copyright © 2024 码农人生. All Rights Reserved