自己试着简单写了一个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'}}

添加新评论

已有 2 条评论

  1. mr158

    mr158

    博主

    就是想折腾一下哈哈

  2. 保罗!

    PHP 不是有内置函数的嘛