PHP 数组Array

直接赋值声明数组

1.一个数组中存的是多个内容,数组中的内容叫做"元素"

2.每个元素都是由键和值组成的 key/value,key下标value对应的值

 $arr[]=0;$arr[2]=2; $arr['three']=3;

3.通过key使用值

下标有两种类型:一种是整数(索引数组),一种是字符串(关联数组)

4.[]来操作下标,也可以使用{}进行互换,建议用[]来指定下标

5.在使用下标时,如果是关联数组,一定要用引号,不要使用常量名称.

6.数组的自动增长下标,默认是从0开始的,自动增长的都是出现过的最大值加1

7.关联数组的字符串下标,不会影响所有下标的排列规则!

  使用array()函数声明数组,默认是索引的下标,是从0开始

8.使用 =>符号指定下标

9.php5.4以后,可以像其他语言一样声明数组了

$arr =['aaa','bbb',3=>'hello','cccccccc'];

10.删除一个数组中的一个元素,unset()函数允许删除数组中的某个键.

  但是要注意数组将不会重建索引,如果需要删除后重建索引,可以用array_values()函数.

应用实例:猴子选大王

<?php

    function selectking($m,$n){
        $arr=array();
        $a ='a';
        for($i=0;$i<$m;$i++){
            $arr[] = $a++;
        }

        $j = 0;
        while(count($arr)>1){

            if($j%$n==0){
                unset($arr[$j]);
            }else{
                $arr[] =$arr[$j];
                unset($arr[$j]);
            }
            $j++;
        }
        return $arr;
    }

    var_dump(selectking(30,3));
?>
View Code

php二位数组和多维数组

数组的遍历

一.使用for语句循环遍历数组(保证数组,一定要是下标连续的索引数组)

不足:
  1.数组下标不一定是连续的

  2.关联数组for不能遍历出值

二.使用foreach语句遍历数组

 foreach(数组 as 自定义变量){
    ...
 }

  1.数组有多少个元素,foreach就循环多少次

  2.foreach会将数组中的元素 在每次循环中,依次将元素的值给自定义的变量,

  在每次循环中用到这个变量,即用到了当前数组中的元素.

foreach(数组 as 下标变量 =>值变量){
      if(is_array())
        ...
}

三.联合使用list(),each()和while循环遍历数组

  list()函数 但这个函数和其他函数的用法不同

  作用: 将数组中的元素转为变量使用

  1.等号左边使用list()函数,等号右边只能是一个数组

  2.数组中有几个元素,在list()中就有几个参数,而且参数必须是变量(新声明的自定义变量),不能是值

list($a,$b,$c) = array('zhangsan','lisi','wangwu');

  3.只能将索引数组(下标是连续的),转为变量,是按下标0开始找的.

  4.可以在list()参数中通过空项选择性的接收数组中的元素

list($a, ,$c) = array('zhangsan','lisi','wangwu');

  each()只是一个函数,参数就是一个数组作为参数,返回的值,也是一个数组

  1.返回的值是一个数组,数组固定有4个元素,而且下标也是固定的, 1(值) value(值) 0(下标) key(下标)

  2.each()只处理当前的元素(默认当前元素是第一个元素,指针指向第一个元素),将当前的元素转为数组信息,处理完后,指针向下一个元素移动

  3.如果指针已经在结束位置了,再使用each()获取元素,返回false

$arr = array('zhangsan','lisi','wangwu');

while(list($key,$val) = each($arr)){
        echo $key.','$val.'<br/>';
}

使用数组的内部指针控制函数遍历数组

next(),prev(),end()及reset()

  这四个函数可以控制目前数组中的指针位置.next()负责将指针向后移动,prev()负责将指针向前移动;end()会将指针指向数组中最后一个元素,而reset()函数则会将目前指针无条件移至第一个索引位置,这几个函数的参数都是数组.

  key()获取当前数组的key键名,current()获取当前数组的value键值.

超全局数组

  超全局数组(变量),在php的脚本中,已经声明完的变量,你可以直接就去使用即可!变量的名字已经规定好的了.

$_SERVER  服务器变量

$_ENV  环境变量

$_GET  HTTP GET变量

$_POST  HTTP POST变量

$_REQUEST  request变量

$_FILES  HTTP 文件上次变量

$_COOKIE  HTTP Cookies

$_SESSION  Session变量

$GLOBALS  Global变量,包含所有超全局数组

  1.数组(关联数组),就和我们自己声明的数组是一样的操作方式

  2.全局

  3.每个预定义的数组都有自己独特的功能

$_GET 接收用户通过URL向服务器传的参数 get

$_POST 接收用户通过http协议向服务器传的参数 http post

$_REQUEST 默认是$_GET, $_POST, $_COOKIE的集合,版本5.3以上,php.ini中有request_order属性来设置$_REQUEST,原来是G,P,C分别代表Get,Post,Cookie,5.3以上的版本request_order默认是设置成GP的,并不包含C,即$_REQUEST默认只包含$_GET和$_POST !

数组处理函数

数组的键/值操作函数

array array_values( array $input)  返回数组中所有的值

array_keys — 返回数组中所有的键名

in_array — 检查数组中是否存在某个值

bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )

  在 haystack 中搜索 needle,如果没有设置 strict 则使用宽松的比较。区分大小写.

array_search — 在数组中搜索给定的值,如果成功则返回相应的键名

array_key_exists — 检查给定的键名或索引是否存在于数组中

isset — 检测变量是否设置

  检测变量是否设置,并且不是 NULL,所以无法判断空值

array_flip — 交换数组中的键和值

array array_flip ( array $trans )

  array_flip() 返回一个反转后的 array,例如 trans 中的键名变成了值,而 trans 中的值成了键名。如果值重复了,后面会覆盖前面.并且值只能是int和string.

array_reverse — 返回一个单元顺序相反的数组

array array_reverse ( array $array [, bool $preserve_keys = false ] )

  如果设置为 TRUE 会保留数字的键。 非数字的键则不受这个设置的影响,总是会被保留。

统计数组元素的个数与唯一性

count — 计算数组中的单元数目或对象中的属性个数

array_count_values — 统计数组中所有的值出现的次数

array array_count_values ( array $input )

  array_count_values() 返回一个数组,该数组用 input 数组中的值作为键名,该值在 input 数组中出现的次数作为值。

array_unique — 移除数组中重复的值

array array_unique ( array $array [, int $sort_flags = SORT_STRING ] )

  array_unique() 接受 array 作为输入并返回没有重复值的新数组。第一次出现的保留,后面重复的去掉.

使用回调函数处理数组的函数

array_filter — 用回调函数过滤数组中的单元

array array_filter ( array $input [, callable $callback = "" ] )

  依次将 input 数组中的每个值传递到 callback 函数。如果 callback 函数返回 TRUE,则 input 数组的当前值会被包含在返回的结果数组中。数组的键名保留不变。

//过滤2的倍数,匿名函数实现
array_filter($arr,function(){
   return !($value % 2 == 0); 
});

array_walk — 对数组中的每个成员应用用户函数

bool array_walk ( array &$array , callable $funcname [, mixed $userdata = NULL ] )

  将用户自定义函数 funcname 应用到 array 数组中的每个单元。如果提供了可选参数 userdata,将被作为第三个参数传递给 callback funcname

//引用改变原来的数组
//array_walk($arr, function(&$value, $key){
array_walk($arr, function($value, $key){
    echo "{$key}------------->{$value}<br/>";
})

array_map — 将回调函数作用到给定数组的单元上

array array_map ( callable $callback , array $arr1 [, array $... ] )

  array_map() 返回一个数组,该数组包含了 arr1 中的所有单元经过 callback 作用过之后的单元。callback 接受的参数数目应该和传递给 array_map() 函数的数组数目一致。

冒泡排序

<?php
    $arr = array(3,8,11,20,5,7,13);
    function bobsort($arr){
        $num = count($arr);
        for ($i=0; $i <$num-1; $i++) { 
            for($j = 0; $j<$num-$i-1;$j++){
                //从小到大
                if($arr[$j]>$arr[$j+1]){
                    $temp = $arr[$j];
                    $arr[$j] = $arr[$j+1];
                    $arr[$j+1] = $temp;
                }
            }
        }
        return $arr;
    }
    
    var_dump(bobsort($arr));
View Code

快速排序

 

posted on 2016-09-19 22:17  gimin  阅读(477)  评论(0)    收藏  举报