Array数组格式

PHP数组其实是一种关系映射,一种把valus关联到keys的模型。

数组的key会进行自动的强制类型转换,如下所示:

1、包含有合法整型值的字符串会被转换为整型。例如键名 "8" 实际会被储存为 8。但是 "08" 则不会强制转换,因为其不是一个合法的十进制数值。
2、浮点数也会被转换为整型,意味着其小数部分会被舍去。例如键名 8.7 实际会被储存为 8
3、布尔值也会被转换成整型。即键名 true 实际会被储存为 1 而键名 false 会被储存为 0
4、Null 会被转换为空字符串,即键名 null 实际会被储存为 “”。
5、数组和对象不能被用为键名。坚持这么做会导致警告:Illegal offset type

如下代码所示:

<?php
$array = array(
    1    => "a",
    "1"  => "b",
    1.5  => "c",
    true => "d",
);
var_dump($array);
?>

输出如下:

Paste_Image.png

因为上面的键名都强制转成了 “1”,每个新单位都会覆盖前一个单元,最后剩下一个 d

key 为可选项。如果未指定,PHP 将自动使用之前用过的最大 integer键名加上 1 作为新的键名。

如下代码

<?php
$array = array(
         "a",
         "b",
    6 => "c",
         "d",
);
var_dump($array);
?>

输出如下

Paste_Image.png

d位于c的后面,则在原来最大的键名6 基础上加 1

重新生成索引
<?php
// 创建一个简单的数组
$array = array(1, 2, 3, 4, 5);
print_r($array);

// 现在删除其中的所有元素,但保持数组本身不变:
foreach ($array as $i => $value) {
    unset($array[$i]);
}
print_r($array);

// 添加一个单元(注意新的键名是 5,而不是你可能以为的 0)
$array[] = 6;
print_r($array);

// 重新索引:
$array = array_values($array);
$array[] = 7;
print_r($array);
?>

输出如下

Paste_Image.png

使用 array_values 即可实现数组的重新索引

object转成array

对于任意 integerfloatstringbooleanresource 类型,如果将一个值转换为数组,将得到一个仅有一个元素的数组,其下标为 0,该元素即为此标量的值。换句话说,(array)$scalarValuearray($scalarValue) 完全一样。
如果一个 object 类型转换为 array,则结果为一个数组,其单元为该对象的属性。键名将为成员变量名,不过有几点例外:整数属性不可访问;私有变量前会加上类名作前缀;保护变量前会加上一个 '*' 做前缀。这些前缀的前后都各有一个 NULL 字符。这会导致一些不可预知的行为:

如下

<?php
$f = 'gg';
var_dump((array)$f);
?>

将如下显示

Paste_Image.png
<?php
class A {
    private $A; // This will become '\0A\0A'
}

class B extends A {
    private $A; // This will become '\0B\0A'
    public $AA; // This will become 'AA'
    protected  $C;
    public $D=1;
}

var_dump((array) new B());

?>

将会如下显示

Paste_Image.png

参考来源:php官方文档

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • foreach() | list() | extract | array_map() | array_walk()...
    彭晓华阅读 4,427评论 0 0
  • 简介 PHP 支持 8 种原始数据类型。 四种标量类型: boolean(布尔型)/ integer(整型) / ...
    零一间阅读 3,823评论 0 0
  • 6.2.3 PHP使用array()声明数组 数组的声明 数组的定义 •直接赋值的方式声明数组•使用array( ...
    曹渊说创业阅读 5,723评论 0 0
  • 数组的概述 PHP 中的数组实际上是一个有序图。图是一种把 values 映射到 keys 的类型。此类型在很多方...
    dptms阅读 5,530评论 0 4
  • 北京开往南宁的G529六号车厢终于安静了下来,孩子们吃饱喝足玩美聊够后终于安心睡去。静静地望着窗外被雾霾笼罩的模糊...
    槑头槑脑儿阅读 2,600评论 11 6