由于数组的序列化/非序列化,我在某些情况下得到了不正确的数组键数据类型。
$data = [
0 => 'item 1',
4 => 'item 2',
7 => 'item 3',
];
$storage->set( 'demo', $data );
// ...and get it back later
$data = storage->get( 'demo' );
var_dump( $data );
/*
Result:
array (size=3)
"0" => string "item 1"
"4" => string "item 2"
"7" => string "item 3"
But I need (keys must be int):
array (size=3)
0 => string "item 1"
4 => string "item 2"
7 => string "item 3"
*/
问:有没有简单的方法可以将键转换回整数?
我尝试了array_reverse( array_map( 'intval', array_reverse( $data ) ) )
,但这会丢失具有不同键但相同值的项目,最重要的是它有非数字键的问题。array_values( $data )
也没有解决类似的问题:它丢失了非数字键,并且键不是连续的(它可以是0, 4, 7
,但array_values()
将分配键0, 1, 2
)
更新-为什么这对我很重要
我们遇到了一些网站配置问题,因为这一点:
$data['0']
返回'item1'
,但$data[0]
返回null
4条答案
按热度按时间5uzkadbs1#
可能最简单的解决方案:
更新:
检查密钥类型:
hi3rlvi22#
您可以使用
is_numeric
和intval
来转换密钥:hivapdat3#
感谢这个伟大的建议https://stackoverflow.com/a/45505894/313501,我想出了这个代码:
kupeojn64#
PHP文档
此外,将发生以下密钥转换:
包含有效十进制整数的字符串,除非数字前面有+号,否则将转换为int类型。例如,键“8”实际上将存储在8下。另一方面,“08”不会被强制转换,因为它不是一个有效的十进制整数。
所以你可以使用它,你不需要检查任何条件