zoukankan      html  css  js  c++  java
  • php数组转json对象并保留数字索引

    本文要解决的问题是php不带索引的数组转换为json对象(而非默认的json数组)

    php中数组转json使用的方法是系统自带的:json_encode

    php中数组转json的规则是:当没有指定索引时会转换为json数组,而指定了索引会转换为json对象。

    那么问题来了,如果需要将一个没有索引的数组转换为json对象该怎么办,先来看下这两种情况:

    1、没有指定索引的情况:

    $val = array("a","b","c","d","e");
    

    转换为json:

    ["a","b","c","d","e"]
    

    2、有索引的情况:

    $val = array("a"=>"a","b"=>"b","c"=>"c","d"=>"d","e"=>"e");
    

    转换为json:

    {
        "a": "a",
        "b": "b",
        "c": "c",
        "d": "d",
        "e": "e"
    }

    那么我们再回到第一种情况,如果在没有索引的情况下想要转换为如下的json对象:

    {
        "0": "a",
        "1": "b",
        "2": "c",
        "3": "d",
        "4": "e"
    }
    

    有人说我们借助另一个数组来手动指定索引并转换即可解决问题:

     $arr = array();
      $val = array("a","b","c","d","e");
      for($i=0;$i<count($val);$i++){
          $arr[''.$i]=$val[$i];
      }
     echo json_encode($arr);

    可实际情况是,这样并不能解决问题,输出的结果依然是json数组。

    原因是:php里数组默认索引是数字0~n(取决于数组的长度),不指定索引时默认是数字序列索引,而手动指定数字序列索引和不指定索引效果是一样的。因此即使这么指定了索引,也是不管用的。

    解决办法也很简单,只要打乱php默认索引规则即可!

    我们只需要在$arr数组初始化时指定一个索引即可,这时php会认为该数组的索引已被用户更改,不再由系统管理。

    以上代码更改为:

     $arr = array(1=>0);
      $val = array("a","b","c","d","e");
      for($i=0;$i<count($val);$i++){
          $arr[''.$i]=$val[$i];
      }
     echo json_encode($arr);
    

    请注意标红的代码,有了这个初始化,后面循环里的代码才能按照我们预想的结果去执行。

    php数组使用远不止这些技巧和要点,还需要大家努力去发现。

    ps:仔细研究了php和js我才渐渐的发现原来弱类型的语言才是高级语言,而强类型的语言则是傻瓜式语言。

  • 相关阅读:
    优秀程序设计的Kiss原则(keep it simple,stupid)
    前端模块化 (好文分享)
    sublime 常用快捷键(转)
    认识与入门 MarkDown (转Te_Lee)
    Sublime Text 3 常用插件以及安装方法(转)
    Flex 布局
    eclipse neon 离线安装插件
    mysql 自动备份命令
    java大并发数据保存方案
    基于webapi的移动互联架构
  • 原文地址:https://www.cnblogs.com/yzeng/p/8413682.html
Copyright © 2011-2022 走看看