php 数组

数组:array ,数据的组合,值将一组数据(多个)存储到一个指定的容器中,用变量指向该容器,然后可以通过变量一次性的到该容器中的所有数据

  语法:定义数组可以用 array()[] 来新建一个数组。它接受任意数量用逗号分隔的键(key) => 值(value)对。key 可以是 integer(索引数组)或者 string(关联数组),value 可以是任意类型,如对象、数组。

  $变量 = array(元素1,元素2,[元素3,元素4])

  取值:$变量[下标,也叫索引]

  赋值:$变量[下边]

    $ss = array();
//  $ss[0] = 'null';
    $sss = array(1=>10,2=>20);
    print_r($sss);

for ($f = 0;$f<100;$f++){
    array_push($ss,'Item'.$f.'<br/>');
}
print_r($ss);

特点:

  可以整数下标或者字符串下标(键值对)

  不同下边可以混合存在

  数组元素的顺序以放入顺序为准,跟下标无关

  数组下标的自增长特性:从0开始自增长

  特殊下标的自动转换

// 特殊下标转换
$str[false] = false;
$str[true] = true;
$str[NULL] = NULL;
var_dump($str);
// 输出:array(3){[0]=>bool(false) [1]=> bool(true) [""]=> NULL}

--------------------------

多维数组:数组嵌套数组,但不建议使用超过三维以上的数组,过于复杂

--------------------------

数组遍历:

  普通数组数将的访问都是通过数组元素的下标来实现访问。

  foreach遍历语法:

  foreach($数组变量 as[$下标=>]$值){

    // 通过$下标访问的下标,同$值访问元素的值

  }

  通常:如果是关联数组(字母下标),就需要下标,如果是数字下标就直接访问值

$arr = array(1,2,3,4,5,6,7,8,9);
// foreach 循环
foreach($arr as $v){
    // $v随意命名
    echo $v,'<br/>';
}

获取下标

$arr = array(1,2,3,4,5,6,7,8,9);
// foreach 循环
foreach($arr as $k=>$v){
    // $v随意命名
    echo 'key:',$k,'==value:',$v,'<br/>';
}
$arr = array(
    0 => array('name'=>'安静','age'=>18),
    1 => array('name'=>'静哥哥','age'=>19)
);
foreach($arr as $value){
    echo 'name is:',$value['name'],'and age is:',$value['age'],'<br/>';
}

原理:本质是数组的内部有一颗指针,默认是指向数组元素的第一个元素,foreach 就是利用指针去获取数据,同时移动指针

for 循环遍历数组

  基于已知边界条件(起始和结束)然后有条件的变化(规律)

  因此:for循环遍历数组有对应条件

    获取数组长度:count(数组)得到数组元素的长度

    要求数组元素的下标是规律的数字

// 特点:索引数组,下标规律
$arr = array(1,2,3,4,5,6,7,8,9);
for($i = 0,$len = count($arr);$i<$len;$i++){
    echo 'key is:',$i,'and value is:',$arr[$i],'<br/>';
}

while 配合each 和list 遍历数组

  while 是在外部定义边界条件,如果要实现可以和for循环

  each 函数使用:each能够从一个数组中获取当前数组指针所指向的元素的下标和值,拿到之后将数组指针下移,同时将拿到的元素下标和值以一个四个元素的数组返回:

    0下标 -> 取得元素的下标值

    1下标 -> 取得元素的值

    key 下标 -> 去的元素的下标值

    value 下标 -> 取得元素的值

$arr = array(1,'name' => 'what',3,'age'=>'18',5);
echo '<pre>';
print_r(each($arr));
print_r(each($arr));
print_r(each($arr));
print_r(each($arr));
print_r(each($arr));
var_dump(each($arr));

  list 函数使用:list 是一种结构,不算一种函数(没有返回值),是list提供一堆变量去从一个数组中取得元素值,然后依次存放到对饮的变量当中(批量为变量赋值:值来源于数组):list必须从索引数组中去获取数据,而且必须从0开始

$arr = array(1,2 => 1);
list($first) = $arr;
var_dump($first);

list 与 each 配合特别好:each 一定有两个元素就是 0和1 下标元素

list(变量1,变量2) = each(数组); // 是一种赋值运算,但是可以得到 false 结果(each 取不到正确的结果),整个表达式为 false

$arr = array(1,'name' => 'K',3,'age' => 21);
while(list($key,$value) = each($arr)){
    echo 'key is:'.$key.'value is:'.$value;
}

数组的相关函数

  排序函数:

    sort(),顺序排序(下标重排)

    rsort(),逆序排序

    asort(),顺序排序(下标保留)

    arsort(),逆序排序

    ksort(),顺序排序:按照键名(下标)

    krsort(),逆序排序

    shuffle(),随机打乱数组元素

  指针函数:

    reset(),重置指针,将数组指针会到首位

    end(),重置指针,将数组指针指导最后一个元素

    next(),指针下移,取得下一个元素的值

    prev(),指针上移,取得上一个元素的值

    current(),获得当前指针对应的元素值

    key(),获取当前指针对应的下标值

  注意:next 和 prev 会移动指针,有可能导致指针移动到最前或最后(离开数组),导致数组不能使用,通过next 和prev 不能回到真确的指针位置,只能通过end或者reset进行指针

  其他函数:

    count(),统计数组中元素的数量

    array_push(),往数组加入一个元素(数组后面)

    array_pop(),往数组取出一个元素(数组后面)

    arra_shift(),往数组取出一个元素(数组后面)

    array_unshift(),往数组加入一个元素(数组后面)

  php模拟数据结构:

    栈:压栈,先进去后出来(FILO)

$arr = array();
//栈:先压栈后出栈
//压栈
array_push($arr,3); 
array_push($arr,2); 
array_push($arr,1); 
print_r($arr);
//出栈
echo array_pop($arr),array_pop($arr),array_pop($arr),'<br/>';

    队列:排队,先进去的先出来(FIFO)

$arr = array();
//入队
array_unshift($arr,3); 
array_unshift($arr,2); 
array_unshift($arr,1); 
print_r($arr);
//出队
echo array_pop($arr),array_pop($arr),array_pop($arr),'<br/>';

    array_reverse(),数组元素反过来

    in_array(),判断一个元素在数组中是否存在

    array_keys(),获取一个数组的所有下标,返回一个索引数组

    array_values(),获取一个数组的所有值,返回一个索引数组

---