PHP中$tb_src字符串与数组混用导致数组仅存首字符问题求助
问题原因&解决方案
这个问题我太熟悉啦!本质是PHP的字符串隐式转换特性坑到你了~
为什么会只拿到第一个字符?
你先把$tb_src定义成了字符串:
$tb_src = 'n1a';
在PHP里,字符串可以像数组一样通过下标访问单个字符(比如$tb_src[0]会取到'n',$tb_src[1]取到'1')。当你试图给$tb_src[1]赋值一个多字符字符串(比如'zzx')时,PHP会默认你是要修改字符串的某个位置的字符,只会取赋值字符串的第一个字符来覆盖原位置的内容,而不是把$tb_src转换成普通数组。
这就导致你以为在给数组元素赋值,实际上只是在修改原字符串的单个字符,自然只能看到第一个字符啦。
两种解决办法
1. 给数组变量换个名字(推荐)
既然你还需要保留原来的字符串变量$tb_src,直接用一个新的变量名来存数组就行,完全避免冲突:
// 保留原字符串变量 $tb_src = 'n1a'; // 用新变量定义数组 $tb_src_arr = []; $tb_src_arr[1] = 'zzx'; $tb_src_arr[2] = 'abc'; // 现在$tb_src_arr[1]就是完整的'zzx'啦
2. 显式将变量转为数组(如果非要用同一个变量名)
如果你坚持要复用$tb_src这个变量名,那在给数组赋值之前,先把它显式转换成空数组,这样PHP就会把它当成普通数组处理,而不是字符串:
// 先使用字符串变量 $tb_src = 'n1a'; // ...这里写需要用到$tb_src字符串的代码 // 用完字符串后,显式转为数组 $tb_src = []; // 现在赋值就会是完整的字符串了 $tb_src[1] = 'zzx'; $tb_src[2] = 'abc';
内容的提问来源于stack exchange,提问作者rockyraw
相关产品推荐
相关产品推荐

