PHP学习之数组Array操作和键值对操作函数(⼀)
PHP 中的数组实际上是⼀个有序映射。映射是⼀种把values关联到keys的类型。此类型在很多⽅⾯做了优化,因此可以把它当成真正的数组,或列表(向量),散列表(是映射的⼀种实现),字典,集合,栈,队列以及更多可能性。由于数组元素的值也可以是另⼀个数组,树形结构和多维数组也是允许的。
在PHP中,数组的每个元素都是由“键=>值”组成的,通过元素的键来访问对应的键的值。“关联数组”指的是键名为字符串的数组,“索引”和“键名“指的是同⼀样东西。”索引“多指数组的数字形式的下标。使⽤数组的处理函数,可以很⽅便的对数组中的每个元素的键和值进⾏操作。
1定义数组array()
可以⽤array()结构来新建⼀个数组,接受任意数量⽤逗号分隔的键(key)=>值(value)对,其中键(key)可以是⼀个整数integer 或者字符string,值(value)可以使任意类型的值。⾃PHP5.4起可以使⽤短数组定义语法,⽤[]替代array()。
<?php
$array=array(
"foo"=>"bar",
"bar"=>"foo"
);
$array=[ //⾃从PHP5.4以后。
"foo"=>"bar",
"bar"=>"foo",
];
?>
key还会有如下的强制转换:
包含有合法整型值的字符串会被转换为整型。例如键名"8"实际会被储存为8。但是"08"则不会强制转换,因为其不是⼀个合法的⼗进制数值。
浮点数也会被转换为整型,意味着其⼩数部分会被舍去。例如键名8.7实际会被储存为8。
布尔值也会被转换成整型。即键名true实际会被储存为1⽽键名false会被储存为0。
会被转换为空字符串,即键名null实际会被储存为""。
php 数组字符串转数组数组和对象不能被⽤为键名。坚持这么做会导致警告:Illegal offset type。
如果在数组定义中多个单元都使⽤了同⼀个键名,则只使⽤了最后⼀个,之前的都被覆盖了。
<?php
$array = array(
1 => "a",
"1" => "b",
1.5 => "c",
true => "d",
);
var_dump($array);
?
>
以上例⼦会输出:
array(1) {
[1]=>
string(1) "d"
}
还可以只对某些单元指定键名⽽对其它的空置:
<?php
$array = array(
"a",
"b",
6 => "c",
"d",
);
var_dump($array);
?>
以上例⼦输出
array(4) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[6]=>
string(1) "c"
[7]=>
string(1) "d"
}
⾃PHP 5.4 起可以⽤数组间接引⽤函数或⽅法调⽤的结果。之前只能通过⼀个临时变量,⾃ PHP 5.5 起可以⽤数组间接引⽤⼀个数组原型。
<?php
function getArray() {
return array(1, 2, 3);
}
// on PHP 5.4
$secondElement = getArray()[1];
// previously
$tmp = getArray();
$secondElement = $tmp[1];
// or
list(, $secondElement) = getArray();
?>
要修改某个值,通过其键名给该单元赋⼀个新值。要删除某键值对,对其调⽤函数。
<?php
$arr = array(5 => 1, 12 => 2);
$arr[] = 56; //相当于增加了⼀个$arr[13] = 56;
$arr["x"] = 42; //增加⼀个新元素,键key=’x‘
unset($arr[5]); //删除数组中5=>1
unset($arr); // 删除整个数组
?>
如果给出⽅括号但没有指定键名,则取当前最⼤整数索引值,新的键名将是该值加上 1(但是最⼩为 0)。如果当前还没有整数索引,则键名将为0。注意这⾥所使⽤的最⼤整数键名不⼀定当前就在数组中。它只要在上次数组重新⽣成索引后曾经存在过就⾏了。以下⾯的例⼦来说明:
<?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);
?
>
以上例⼦会有如下输出:
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
)
Array
(
)
Array
(
[5] => 6
)
Array
(
[0] => 6
[1] => 7
)
2.is_array()
is_array — 检测变量是否是数组,bool is_array ( $var ),如果 var是,则返回 TRUE,否则返回 FALSE.
3.explode()
explode——使⽤⼀个字符串分割另⼀个字符串。array explode ( string $delimiter , string $string [, int $limit ] ),此函数返回由字符串组成的数组,每个元素都是 string的⼀个⼦串,它们被字符串 delimiter作为边界点分割出来。delimiter 边界上的分割字符,string输⼊的字符串,如果设置了 limit参数并且是正数,则返回的数组包含最多 limit个元素,⽽最后那个元素将包含 string的剩余部分。如果 limit参数是负数,则返回除了最后的 -limit个元素外的所有元素。如果 limit 是 0,则会被当做 1。
<?php
$str = 'one|two|three|four';
// 正数的 limit
print_r(explode('|', $str, 2));
// 负数的 limit(⾃ PHP 5.1 起)
print_r(explode('|', $str, -1));
?>
以上例⼦会有如下输出
Array
(
[0] => one
[1] => two|three|four
)
Array
(
[0] => one
[1] => two
[2] => three
)
4.implode()
implode — 将⼀个⼀维数组的值转化为字符串
<?php
$array = array('lastname', 'email', 'phone');
$comma_separated = implode(",", $array);
echo $comma_separated; // lastname,email,phone
// 当数组为空时,返回的字符串也是空
var_dump(implode('hello', array())); // string(0) ""
?
>
5.split
split — ⽤正则表达式将字符串分割到数组中,array split ( string $pattern , string $string [, int $limit ] ),本函数返回⼀个字符串数组,每个单元为 string 经区分⼤⼩写的正则表达式 pattern 作为边界分割出的⼦串。如果设定了 limit,则返回的数组最多包含 limit 个单元,⽽其中最后⼀个单元包含了 string 中剩余的所有部分。如果出错,则 split() 返回 FALSE。
<?php
// 分隔符可以是斜线,点,或横线
$date = "04/30/1973";
list($month, $day, $year) = split ('[/.-]', $date);
echo "Month: $month; Day: $day; Year: $year<br />\n";
?>
6.preg_split()
preg_split — 通过⼀个正则表达式分隔字符串,array preg_split ( string $pattern , string $subject [, int $limit = -1 [, int $flags = 0 ]]
),pattern⽤于搜索的模式,字符串形式。subject输⼊字符串
limit如果指定,将限制分隔得到的⼦串最多只有limit个,返回的最后⼀个⼦串将包含所有剩余部分。limit值为-1, 0或null时都代表"不限制",作为php的标准,你可以使⽤null跳过对flags的设置。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论