V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
my101du
V2EX  ›  问与答

请教一个 PHP 里数组删除某个元素后原值类型的问题

  •  
  •   my101du · 2016-06-04 09:43:31 +08:00 · 2639 次点击
    这是一个创建于 3102 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在用 LeanCloud 的 PHP SDK ,有一个场景是这样的。

    获取到一个数组,格式如下:(这个是 LeanCloud 的 Class 里存储的样子,实际上在客户端里是正常的数组形式)

    $test = [
        {"title": "aaa"},
        {"title": "bbb"},
        {"title": "ccc"}
    ]
    

    使用 unset($test[1]) 后,传回到 LeanCloud ,触发了 Exception ,提示你上传了一个 Object ,而不是 Array 。

    我用 print_r 输出后,这个处理后的数组是正常显示的(索引剩下 0 、 2 )

    然后用 is_array($test) 得到 true

    然后发现当 unset($test[2]) (即删除最后一个元素),再提交到 LeanCloud ,却没有说这是一个 Object 了。

    那么是不是当索引的顺序被破坏后,一个 Array 就变成了 Object ,那为什么 is_array 仍然返回 true呢?

    7 条回复    2016-06-04 11:59:14 +08:00
    fising
        1
    fising  
       2016-06-04 10:10:48 +08:00 via iPhone
    你写的这到底是 php 还是 js
    msg7086
        3
    msg7086  
       2016-06-04 10:17:23 +08:00   ❤️ 1
    PHP 里的 Array 对数组和哈希表的区分并没有明确的界限。
    你删掉第二个元素以后,这个 Array 就不是数组而是哈希表了。
    [1, 2, 3] 删掉第二个元素以后就变成了 [0=>1, 2=>3]。
    lynnworld
        4
    lynnworld  
       2016-06-04 10:20:06 +08:00   ❤️ 1
    php 里面 array 既可以是数组又可以是 hash,在 json 序列化的时候,如果 index 不是从 0 开始连续的数字就认为是 hash ,序列化成{} 对象了。你 unset 之后可以使用 array_merge 帮你重新排一下下标。
    500miles
        5
    500miles  
       2016-06-04 11:01:24 +08:00   ❤️ 1
    没错儿, php 中的 array 是如此的 amazing.....

    真数组 在这里叫 索引数组 , map 或者 字典等 在这里叫做 关联数组

    ------

    做个实验就知道了..

    $amazing = [1, 2, 3];

    echo json_encode($amazing); // output : "[1,2,3]"

    unset($amazing[1]);

    echo json_encode($amazing); // output : "{"0":1,"2":3}"
    my101du
        6
    my101du  
    OP
       2016-06-04 11:01:54 +08:00
    @msg7086
    @lynnworld 非常感谢两位的解答,明白了。 我对这些深入的东西了解太少了
    void1900
        7
    void1900  
       2016-06-04 11:59:14 +08:00
    unset($array[1]) 后,就变成 key=>value 了,

    unset 后调用一次 $array = array_values($array);

    json 通信基本问题啊
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2606 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 06:57 · PVG 14:57 · LAX 22:57 · JFK 01:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.