最近在开发一个考试系统,组装考题的时候,需要将抽取的选择题、填空题等合并到一起。但可能会出现没有选择题,即选择题数组为空的情况。
$ehquestion = string2array($r['ehquestion']);//获取考题信息
$ehquestion = array_merge($ehquestion['questiontype1'],$ehquestion['questiontype2'],$ehquestion['questiontype3'],$ehquestion['questiontype4'],$ehquestion['questiontype5'],$ehquestion['questiontype6']);
array_multisort(array_column($ehquestion,'questiontype'),SORT_ASC,$ehquestion);
按照上面的代码,var_dump( e h q u e s t i o n ) , 结 果 为 N U L L 。 仔 细 分 析 后 , 发 现 是 因 为 合 并 的 数 组 中 ehquestion),结果为NULL。 仔细分析后,发现是因为合并的数组中 ehquestion),结果为NULL。仔细分析后,发现是因为合并的数组中ehquestion[‘questiontype5’]为NULL,结果,合并后的数组也变成了NULL。
查询资料得知,array_merge()可以合并多个数组,当其中某个值为null或其他非数组时,函数返回null,所以使用的时候要转义参数
array_merge( (array) a r r 1 , ( a r r a y ) arr1, (array) arr1,(array)arr2 ) 这样就不会返回null了;
于是改为:
$ehquestion = string2array($r['ehquestion']);//获取考题信息
$ehquestion = array_merge((array)$ehquestion['questiontype1'],(array)$ehquestion['questiontype2'],(array)$ehquestion['questiontype3'],(array)$ehquestion['questiontype4'],(array)$ehquestion['questiontype5'],(array)$ehquestion['questiontype6']);
array_multisort(array_column($ehquestion,'questiontype'),SORT_ASC,$ehquestion);
结果就正常了。
另外附上相关知识介绍以及链接。
合并数组$arr1 +
a
r
r
2
和
a
r
r
a
y
m
e
r
g
e
(
arr2 和array_merge(
arr2和arraymerge(arr1,$arr2);
1)键名为数字时,array_merge()不会覆盖掉原来的值,但+合并数组则会把最先出现的值作为最终结果返回,而把后面的数组拥有相同键名的那些值“抛弃”掉(不是覆盖)
2)键名为字符时,+仍然把最先出现的值作为最终结果返回,而把后面的数组拥有相同键名的那些值“抛弃”掉,但array_merge()此时会覆盖掉前面相同键名的值
array_merge可能会踩的坑
https://blog.csdn.net/qq_33636325/article/details/84106316
php数组合并用加号和用array_merge()的区别
https://blog.csdn.net/littlexiaoshuishui/article/details/82997707