php数组基础知识

自 5.4 起可使用短数组定义语法,用 [] 替代 array()php

<?php 数组

$array = array(
    
"foo" => "bar",
    
"bar" => "foo",
);

// 自 PHP 5.4 起
$array = [
    
"foo" => "bar",
    
"bar" => "foo",
];

?> 函数

key 能够是 integer 或者 stringvalue 能够是任意类型。 spa

此外 key 会有以下的强制转换: .net

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

若是在数组定义中多个单元都使用了同一个键名,则只使用了最后一个,以前的都被覆盖了。 code

方括号和花括号能够互换使用来访问数组单元(例如 $array[42] 和 $array{42})

要修改某个值,经过其键名给该单元赋一个新值。要删除某键值对,对其调用 unset() 函数。 对象


若是给出方括号但没有指定键名,则取当前最大整数索引值,新的键名将是该值加上 1(可是最小为 0)。若是当前尚未整数索引,则键名将为 0索引

注意这里所使用的最大整数键名不必定当前就在数组中。它只要在上次数组从新生成索引后曾经存在过就好了。如下面的例子来讲明: 字符串

<?php
// 建立一个简单的数组
$array = array(12345);
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);
?>

以上例程会输出: get

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
)
Array
(
)
Array
(
    [5] => 6
)
Array
(
    [0] => 6
    [1] => 7
)

数组作什么和不作什么

为何 $foo[bar] 错了?

应该始终在用字符串表示的数组索引上加上引号。例如用 $foo['bar'] 而不是 $foo[bar]。可是为何呢?可能在老的脚本中见过以下语法:

<?php
$foo
[bar] = 'enemy';
echo 
$foo[bar];
// etc
?>

这样是错的,但能够正常运行。那么为何错了呢?缘由是此代码中有一个未定义的常量(bar)而不是字符串('bar'-注意引号),而 PHP 可能会在之后定义此常量,不幸的是你的代码中有一样的名字。它能运行,是由于 PHP 自动将裸字符串(没有引号的字符串且不对应于任何已知符号)转换成一个其值为该裸字符串的正常字符串。例如,若是没有常量定义为 bar,PHP 将把它替代为 'bar' 并使用之。

下标从 1 开始的数组

<?php
$firstquarter  
= array(=> 'January''February''March');
print_r($firstquarter);
?>

以上例程会输出:

Array 
(
    [1] => 'January'
    [2] => 'February'
    [3] => 'March'
)
相关文章
相关标签/搜索