PHP再帰方式一つの配列内のnullを空文字列に変換する方法

13839 ワード

一部のインタフェースの呼び出しでは、データベースを直接問い合わせるフィールドがnullフィールドである可能性があるが、フロントエンドの判断を簡便にするためにnullを空文字列’’’’’’’に変換する必要があり、この場合は再帰的に行う必要がある.直接上のコードは次のとおりです.

//             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
}


参考原文リンク:https://www.cnblogs.com/xuzhengzong/p/8571063.html