PHP数组深入

1、数组创建

索引数组:数组下标是数字

//自动分配:
$cars=array("Volvo","BMW","SAAB"); 
//手动分配1:
$cars[0]="Volvo";
$cars[1]="BMW";
$cars[2]="SAAB";
//手动分配2(与1等价):
$cars[]="Volvo";
$cars[]="BMW";
$cars[]="SAAB";

关联数组:数组下标是字符串

//自动分配:
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
//手动分配:
$age['Peter']="35";
$age['Ben']="37";
$age['Joe']="43";
echo "Peter is " . $age['Peter'] . " years old.";

多维数组
多维数组是数组的嵌套,即数组中又包含数组
二维数组例子;

<?php
$cars = array
(
array("Volvo",22,18),
array("BMW",15,13),
array("Saab",5,2),
array("Land Rover",17,15)
);
echo $cars[0][0].": 库存:".$cars[0][1].", 销量:".$cars[0][2].".<br>";
echo $cars[1][0].": 库存:".$cars[1][1].", 销量:".$cars[1][2].".<br>";
echo $cars[2][0].": 库存:".$cars[2][1].", 销量:".$cars[2][2].".<br>";
echo $cars[3][0].": 库存:".$cars[3][1].", 销量:".$cars[3][2].".<br>";
?>


可以在 for 循环中使用另一个 for 循环,来获得 $cars 数组中的元素(仍需使用两个索引):

2、数组遍历

for()循环(略)
foreach循环
语法:

foreach ($array as $value) {
    code to be executed;
}

例子:
索引数组:

$colors = array("red","green","blue","yellow"); 
foreach ($colors as $value) {
    echo "$value <br>";
}


关联数组:

$age=array("Bill"=>"35","Steve"=>"37","Peter"=>"43");
foreach($age as $x=>$x_value) {
    echo "Key=" . $x . ", Value=" . $x_value;
    echo "<br>";
}

list,each,while遍历(list看不到字符串下标的值)
list的作用:list — 把数组中的值赋给一组变量
list() 仅能用于数字索引的数组,并假定数字索引从 0 开始
each — 返回数组中当前的键/值对并将数组指针向前移动一步
返回 array 数组中当前指针位置的键/值对并向前移动数组指针。键值对被返回为四个单元的数组,键名为0,1,key和 value。单元 0 和 key 包含有数组单元的键名,1 和 value 包含有数据。(看手册)

$fruit = array('a' => 'apple', 'b' => 'banana', 'c' => 'cranberry');
reset($fruit);
while (list($key, $val) = each($fruit)) {
    echo "$key => $val\n";
}


使用数组的内部指针控制函数遍历数组
key()获取当前数组指针所在键值,

current()获取当前数组指针所在元素值,

next()获取当前数组指针下一个元素值并将指针下移一位,

prev()获取当前数组指针上一个元素值并将指针上移一位,

end()获取当前数组最后一个元素值并将指针移到最后,

reset()获取当前数组第一个一个元素值并将指针移到第一位

3、获得数组的长度:count($arr)

4、数组排序

sort($arr) - 按值把数组值进行排序,升序,不保留key
rsort($arr) - 按值把数组值进行排序,降序,不保留key
asort($arr) - 按值把数组值进行排序,升序,保留key
arsort($arr) - 按值把数组值进行排序,降序,保留key
ksort($arr) - 按键把数组值进行排序,升序,保留key
krsort($arr) - 按键把数组值进行排序,降序,保留key
natsort();-自然排序,用于有字符串数组
natcasesort();-忽略大小写的自然排序,用于有字符串数组
array_multisort();-用一个数组对另外一个数组进行排序

5、array_map();将回调函数作用到给定数组的单元上

6、键值操作

获取数组中的值
array_values();返回含所有值的索引数组
获取数组中的键
array_keys();返回数组中部分的或所有的键名
array array_keys ( array $array [, mixed $search_value = null [, bool $strict = false ]] )
检查一个值是否在数组中
in_array();
bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )
检查一个键是否在数组中
array_key_exists();
键和值对调
array_flip();
数组中的值反转
array_reverse();
删除数组中重复值
array_unique();
统计数组中值出现的次数
array_count_values();(限于元素为字符串或整型的数组)
自己实现

function acv($arr){
    foreach($arr as $val){
        if(!isset($arr2[$val]))
            $arr2[$val]=0;
        $arr2[$val]++;
    }
    return $arr2;
}        

数组值过滤
array_filter();
自己实现(还没有实现回调函数):

function af($arr){
     foreach($arr as $k=>$v)
        if(empty($v))
            unset($arr[$k]);
    return $arr;
}

7、拆分、合并、分解与结合函数

array_slice($arr,$index,$length);返回截取的一段值,原数组不变
array_splice($arr,$index,$length);返回截取的一段值,改变原数组
array_combine($arr1,$arr2);合并,前一个是key,后一个是value
array_merge(); 并集;合并,键值相同,后面覆盖前面
implode();/join() 把数组连接成字符串
$str=implode($arr,'-');
explode();把字符串分解成数组
$str='2016-06-27';
$arr=explode('-',$str);

8、插入删除函数

array_pop();从最后弹出一个值,返回弹出值
array_push();从最后压入一个值,返回数组个数
array_shift();从前面弹出一个值,返回移出值,原数组下标重排
array_shift($arr);不考虑返回值,等价于array_splice($arr,0,1);
array_unshift();从前面插入一个值,返回数组个数
array_unshift($arr,$v);不考虑返回值,等价于$arr=array_merge(array($v),$arr);

9、其他常用函数

array_rand();随机取一个key
shuffle();打乱数组
array_sum();数组所有值的和
array_product($arr)求数组乘积
array range ( mixed $start , mixed $end [, $step = 1 ] )获取一个范围内数组
小应用

//生成随机验证码
$arr=range(0,9);
$arr2=range('a','z');
$arr3=range('A','Z');
$arr4=array_merge($arr,$arr2,$arr3);
shuffle($arr4);
$arr5=array_slice($arr4,0,4);
$str=join($arr5,'');
echo $str;

10、超全局数组

1)$_SERVER 查看服务器信息
2)$_GET 地址中参数
localhost/index.php?id=10&name=user1&age=20&sex=nan
echo "<pre>";
print_r($_GET);
echo "</pre>";
可用于超链接传值、表单传值
3)$_POST 表单提交的值
4)$_REQUEST $_GET和$_POST全接收
速度慢,不推荐使用
5)$_FILES 文件上传
6)$_COOKIE 跟踪用户状态
7)$_SESSION 保存会话信息
8)$GLOBALS 获取所有全局变量和超全局变量

上一篇:【转载】"library not found for - "解决办法


下一篇:SVM学习笔记-线性支撑向量机