PHP json_encode的实现

自己试着简单写了一个PHP数组转换json的代码,
数字与数字字符串的键值问题也考虑到了,
感兴趣的可以看下:

class JsonEncode {
  public function __construct(){
    $this->json = '';
  }
  public function run($arr){
    $i = 0;
    $flag = true;
    foreach($arr as $k => $v){
      if(!is_int($k)||$k>=count($arr)||$k<0) $flag = false;
    }
    foreach($arr as $k => $v){
      if(is_int($k)&&$flag){
        if($k==0) $this->json .= '[';
        $this->concat($v);
        if($k+1==count($arr)) $this->json .= ']';
      }else{
        $flag = false;
        if($i==0) $this->json .= '{';
        $this->json .= '"'.$k.'":';
        $this->concat($v);
        if($i+1==count($arr)) $this->json .= '}';
      }
      $this->json .= ',';
      $i++;
    }
    $this->json = substr($this->json, 0 ,-1);
    return $this->json;
  }
  private function concat($v){
    if(is_array($v)){
      if(empty($v)){
        $this->json .= '[]';
      }else{
        $this->run($v);
      }
    }else{
      $this->json .= '"'.$v.'"';
    }
  }
}

代码应用

  $arr = array('1','abc');
  $arr2 = array('-1'=>'123',2=>'123');
  $arr3 = array('0'=>'123',1=>'123');
  $arr4 = array(
    '1'=>'内容',
    '测试'=>'内容',
    'test1'=>'',
    'test2'=>array('1','2',
      array(
          'key'=>'value'
      )
    ),
    'test3'=>array(
      'key'=>'value'
    )
  );

$data = new JsonEncode()->run($arr); // ['1','abc']
$data = new JsonEncode()->run($arr2); // {-1:'123', 2:'123'}
$data = new JsonEncode()->run($arr3); // ['123','123']
$data = new JsonEncode()->run($arr4); 
// {1:'内容', '测试':'内容', 'test1':'', 'test2':['1','2',{'key':'value'}], 'test3':{'key':'value'}}
 Vue SPA项目加载优化
[踩坑]关于PHP写小程序后台时的BOM头 
上一篇:Vue SPA项目加载优化
下一篇:[踩坑]关于PHP写小程序后台时的BOM头


已有 2 条评论


  1. 保罗!
    保罗!

    PHP 不是有内置函数的嘛

     Reply
  2. mr158
    mr158

    就是想折腾一下哈哈

     Reply

如果我的文章对你有帮助,或许可以打赏一下呀!

支付宝
微信
QQ