在一些接口的调用中,直接查询数据库出来的字段可能为null字段,但是为了简便前端的判断,需要把null转换成空字符串’’,这个时候就需要递归的方式进行。直接上代码如下:
<?php
// 递归方式把数组或字符串 null转换为空''字符串
function _unsetNull($arr){
if($arr !== null){
if(is_array($arr)){
if(!empty($arr)){
foreach($arr as $key => $value){
if($value === null){
$arr[$key] = '';
}else{
$arr[$key] = _unsetNull($value); //递归再去执行
}
}
}else{ $arr = ''; }
}else{
if($arr === null){ $arr = ''; } //注意三个等号
}
}else{ $arr = ''; }
return $arr;
}
// 递归方式把数组或字符串中的空字符串转换为null
function emptyStringToNull($arr){
if($arr !== ''){
if(is_array($arr)){
if(!empty($arr)){
foreach($arr as $key => $value){
$arr[$key] = ($value === '') ? null : emptyStringToNull($value);
}
} else {
$arr = null;
}
} else {
if($arr === '') {
$arr = null;
} //注意三个等号
}
} else {
$arr = null;
}
return $arr;
}
var_dump(_unsetNull(null)); // string(0) ""
$arr1 = array('name'=>'zhangsan', 'age'=>18, 'gender'=>'male', 'phone'=>null, 'hobby'=>null);
var_dump(_unsetNull($arr1));
$arr2 = array('name'=>'zhangsan', 'age'=>18, 'gender'=>'male', 'phone'=>'', 'hobby'=>'');
var_dump(emptyStringToNull($arr2));
?>
测试输出结果:
string(0) ""
array(5) {
["name"]=>
string(8) "zhangsan"
["age"]=>
int(18)
["gender"]=>
string(4) "male"
["phone"]=>
string(0) ""
["hobby"]=>
string(0) ""
}
array(5) {
["name"]=>
string(8) "zhangsan"
["age"]=>
int(18)
["gender"]=>
string(4) "male"
["phone"]=>
NULL
["hobby"]=>
NULL
}