PHP头条
热点:

Php(五)--数组,php--数组


Php(五)—数组

数组的类型

php中有两种类型的数组,即索引数组和关联数组.索引数组键由数字组成,(默认为索引数组),关联数组由字符串和数字混合组成.
- 关联数组
array1=array(a=>foo,b=>bar);array2 = array(1=>”foo”,2=>”bar”);

$a = array("foo1","foo2","foo3");
$b = array("a","b",6=>"c","");
var_dump($a);
var_dump($b);
输出结果:array(3) {
 [0]=>
string(4) "foo1"
 [1]=>
 string(4) "foo2"
  [2]=>
 string(4) "foo3"
}
array(4) {
 [0]=>
string(1) "a"
[1]=>
string(1) "b"
 [6]=>
 string(1) "c"
 [7]=>
string(1) "d"
}

创建数组

除了上节所示的,还有:

$arr["a"] = "red";
$arr["b"] = "orange";
var_dump($arr);
$arr2 = ["dog","cat","wolf"];
var_dump($arr2);
$arr3[] = "a";
$arr3[] = "b";
var_dump($arr3);

还可以使用range()来建立一个指定范围单元的数组
array range(mixed start,mixedlimit [,number $step]);
step:单元之间的步进值;

$a = range(0,6,2);
$b = range("a","g");
print_r($a);
print_r($b);
输出结果:Array
(
[0] => 0
[1] => 2
[2] => 4
[3] => 6    
)
Array
(
[0] => a
[1] => b
[2] => c
[3] => d
[4] => e
[5] => f
[6] => g
)

二维数组

$person = array("jack"=>array("age"=>20,"weight"=>"50kg"),
                "Tom"=>array("age"=>19,"weight"=>"45kg")
);
print_r($person);

多维数组

$arr = array("安徽"=>array("宿州"=>array("埇桥区","灵璧县"),
                            "合肥"=>array("蜀山区","肥东")),
    "河南"=>array(",,"=>array(",,",",,"),
        ",,"=>array(",,",",,"))
);
print_r($arr);

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

bool in_array(mixed needle,arrayhaystack [,bool $strict = FALSE])
说明: 如果没有设置strict,就使用宽松的比较.如果设为true,就还会检查类型是否相同.
注意: in_array()函数只能在当前维度数组中检查是否存在某个元素.

$arr = array("安徽"=>array("宿州"=>array("埇桥区","灵璧县"),
                            "合肥"=>array("蜀山区","肥东")),
    "河南"=>array(",,"=>array(",,",",,"),
        ",,"=>array(",,",",,"))
);
var_dump(in_array("合肥",$arr));
$arr2 = ["red","green","blue"];
var_dump(in_array('green',$arr2));
输出结果:bool(false)
    bool(true)

数组转换为字符串

string implode(string glue,arraypieces)
glue:分割符

$arr2 = ["red","green","blue"];
$string = implode("-",$arr2);
echo $string;
输出结果:red-green-blue

计算数组中的单元数目

int count(mixed var[,intmode = COUNT_NORMAL])

$person = array("jack"=>array("age"=>20,"weight"=>"50kg"),
                "Tom"=>array("age"=>19,"weight"=>"45kg")
);
echo count($person)." ";
echo count($person,1);
输出结果:2 6

数组当前单元和数组指针

$food = ["orange","banana","apple"];
echo current($food)." ";//指针指向当前单元
echo next($food)." ";//指针向下移
echo prev($food)." ";//指针向前移
echo end($food)." ";//指针指向最后一位
echo reset($food);//重置指针,指向第一位
输出结果:orange banana orange apple orange

数组中的键名和值

从关联数组中取得键名

使用key()函数可以从关联数组中返回键名

$fruits = ['fruit1'=>'apple','fruit2'=>'orange ','fruit3'=>'grape','fruit4'=>'apple'];
for ($i=0;$i<count($fruits);$i++){
    echo key($fruits)."<br/>";
    next($fruits);//将数组指针向后移
}

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

使用array_key_exists()函数检查给定键名或索引是否存在于数组中

if(array_key_exists("fruit1",$fruits)){//检测数组中是否存在键fruit1
    echo "exist";
}

获取数组中部分或所有的键名

使用array_keys()函数可获得数组中部分或所有键名

print_r(array_keys($fruits));//返回所有的key
print_r(array_keys($fruits,"apple"));//判断时,是使用严格的"==="

获取数组中所有的值

使用array_values()函数课获得数组中所有的值

print_r(array_values($fruits));

搜索给定值返回键名

使用array_search()可以在数组中搜索给定的值,如果成功就返回首次出现相应的键名.如果想返回所有匹配的值,应该使用array_keys();

$key=array_search("apple",$fruits);
echo $key;

填补数组

1.array_pad()

可用值将数组填补到指定长度,返回数组的一个备份,如果小于原本的数组长度,则不填补.

$result = array_pad($fruits,6,1);//从数组尾部开始用"1",填补数组到含6个元素.
print_r($result);
$result = array_pad($fruits,-6,1);//从数组首部开始用"1",填补数组到含6个元素.
print_r($result);
输出结果:Array(
[fruit1] => apple
[fruit2] => orange 
[fruit3] => grape
[fruit4] => apple
[0] => 1
[1] => 1)
Array(
[0] => 1
[1] => 1
[fruit1] => apple
[fruit2] => orange 
[fruit3] => grape
[fruit4] => apple)

2.array_fill()

可以用给定的值填充数组

$a = array_fill(5,2,"banana");//"banana"填充数组到2个元素,索引键从5开始
print_r($a);
$c = array_fill(-2,3,"pear");//如果是负数,则第二个元素从"0"开始
print_r($c);
输出结果:Array(
[5] => banana
[6] => banana)
Array(
[-2] => pear
[0] => pear
[1] => pear)

3.array_fill_keys()

使用指定的键和值填充数组.

$a = array_fill_keys($keys,"banana");//使用$keys数组的值作为键,banana作为值重新组件一个数组
print_r($a);
输出结果:Array(
[foo] => banana
[5] => banana
[bar] => banana)

从数组中随机取出一个或多个单元

array_rand()函数可以从数组中取出一个或多个随机的单元,并返回随机条目的一个或多个键.

$rand_array = array_rand($fruits,2);//从该数组中随机取出两个单元,组成一个新的数组返回.
print_r($rand_array);

数组排序与打乱数组

1.sort()

可以实现对数组的排序,不保持索引关系.
第二个参数是可选参数:
- SORT_REGULAR 正常比较单元;
- SORT_NUMERIC 单元被作为数字来比较;
- SORT_STRING 单元被作为字符串来比较;
- SROT_LOCALE_STRING 根据当前的区域(locale)设置来把单元当作字符串比较,可以用setlocale()来改变;
- SORT_NATURAL 和natsort()类似,对每个单元一”自然的顺序”对字符串进行排序.PHP5.4.0总新增的一个参数;
- SORT_FLAG_CASE 能够与SORT_STRING或SORT_NATURAL合并(“或位运算”),不区分大小写排序字符串.

$fruits = array("lemon","orange","banana","apple");
sort($fruits);
print_r($fruits);
输出结果:Array(
[0] => apple
[1] => banana
[2] => lemon
[3] => orange)

2.asort()

对数组进行排序并保持索引关系

$fruits = array("l"=>"lemon","o"=>"orange","b"=>"banana","a"=>"apple");
asort($fruits);
print_r($fruits);
输出结果:Array(
[a] => apple
[b] => banana
[l] => lemon
[o] => orange)

3.arsort()

对数组进行你想排序并保持索引关系.

$fruits = array("l"=>"lemon","o"=>"orange","b"=>"banana","a"=>"apple");
arsort($fruits);
print_r($fruits);
输出结果:Array(
[o] => orange
[l] => lemon
[b] => banana
[a] => apple)

4.rsort()

对数组进行你想排序,但是不保持索引关系.

5.shuffle()

将数组打乱,但不保持索引关系.

遍历数组

常用for,foreach,each,list对数组进行遍历.

1.for循环便利数组

不改变数组的内部指针.

for ($i = 0;$i<count($fruits);$i++){
    echo $fruits[$i]." ";
}

2.foreach遍历数组

foreach ($fruits as $val){
    echo $val." ";
}

特别的,在循环内部修改数组,不会对,循环之外访问数组有影响.除非传入的是引用传递(&$val),跟C++里的差不多.

3.each()和list()

each()其实就是让数组指针向后移动.
两者结合:

while (list($key,$val)=each($fruits)){
    echo $key."=>".$val." ";
}
输出结果:0=>lemon 1=>orange 2=>banana 3=>apple

也可以使用list()将数组的值分别赋给变量.

$array = array("coffee","brown","caffeine");
list($drink,$color,$power)= $array;
echo $drink." ".$color." ".$power." ";

数组的拆分与合并

1.array_chunk()

将函数分割成多个数组,返回一个多位数组.
三个参数,1.数组,2.分割后每个数组的大小,3.是否保留键名(默认不保留)

$info = array("a","b","c","d");
print_r(array_chunk($info,2));
输出结果:Array(
[0] => Array
    (
        [0] => a
        [1] => b
    )
[1] => Array
    (
        [0] => c
        [1] => d
    )
)

2.array_merge()

合并一个或多个数组.
如果输入的数组中有相同的字符串键名,那么该键名后面的值将覆盖前一个值.如果数组包含数字键名,那么后面的值将不会覆盖原来的值,而是附加到后面.
备注:如果想完全保留数组并只想将新的数组附加到后面,就用”+”运算符,连接数组.

增加/删除数组中元素

1.array_unshift()

可在数组开头插入一个或多个单元.

$array = array("orange","banana");
array_unshift($array,"apple","pear");//在头部插入两个.
print_r($array);
输出结果:Array(
[0] => apple
[1] => pear
[2] => orange
[3] => banana)

2.array_shift()

可将数组开头的单元移除数组.

$array = array("orange","banana");
array_unshift($array,"apple","pear");//在头部插入两个.
array_shift($array);//将头部单元移除.
print_r($array);
输出结果:Array(
[0] => pear
[1] => orange
[2] => banana)

3.array_push()

可将一个或多个单元压入数组的末尾(入栈).

$array = array("orange","banana");
array_unshift($array,"apple","pear");//在头部插入两个.
array_shift($array);//将头部单元移除.
array_push($array,"apple");//"apple"压入数组末尾.
print_r($array);

4.array_pop()

可将数组的最后一个单元弹出(出栈).

其他常用数组函数

1.array_slice()

可以从数组中取出一段,即截取数组.(第二个参数为起始位置,第三个参数为长度,第四个参数为是否重新排序并重置数组的数字索引),特殊情况起始位置为负数,则从末尾开始计数,长度也同样如此.

print_r(array_slice($array,1,-1));
print_r(array_slice($array,1,-1,true));//不改变索引
输出结果:Array(
[0] => orange
[1] => banana)
Array(
[1] => orange
[2] => banana)

2.array_splice()

可以把数组中的一部分去掉并用其他值代替.跟array_slice()相反.

3.is_array()

检测变量是否为数组;如果是,则返回true.

$a = "30";
var_dump(is_array($array));
var_dump(is_array($a));
输出结果:bool(true)
bool(false)

4.array_sum()

可计算数组中所有值的和.注意普通字符串被当作0处理,而数字类型的字符串则会转化为相应的整数型或浮点型.

$a = ['b','2',3,4,'a'];
echo array_sum($a);
输出结果:9

5.array_product()

用来计算数组中所有值的乘积并返回.

6.array_flip()

用来交换数组中的键和值.

系统预定义数组

1.$_SERVER

它是一个包含了诸如头信息(header),路径(path)及脚本位置(script locations)信息的数组,这个数组中的项目有Web服务器创建.不能保证每个服务器都提供全部项目,服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目.

数组元素 说明
$_SERVER[‘PHP_SELF’] 当前执行脚本的文件名,与document root有关.例如,在地址为http://example.com/test.php/foo.bar 的脚本中使用 $_SERVER[‘PHP_SELF’]将得到/test.php/foo.bar
$_SERVER[‘SERVER_ADDR’] 当前运行脚本所在服务器的IP地址
$_SERVER[‘SERVER_NAME’] 当前运行脚本所在服务器的主机名.如果叫啊本运行于虚拟主机中,该名称就由那个虚拟主机所设置的值决定
$_SERVER[‘SERVER_PROTOCOL’] 请求页面时通信协议的名称和版本.例如,”HTTP/1.0”
$_SERVER[‘REQUEST_METHOD’] 访问页面使用的请求方法.例如,GET,POST,HEAD,PUT
$_SERVER[‘DOCUMENT_ROOT’] 当前运行脚本所在的文档根目录.在服务器配置文件中定义
$_SERVER[‘HTTP_ACCEPT_LANGUAGE’] 当前请求头中Accept-Language:项的内容(如果存在).例如,”en”
$_SERVER[‘REMOTE_ADDR’] 浏览当前页面的用户IP地址,注意与$_SERVER[‘SERVER_ADDR’]的区别
$_SERVER[‘SCRIPT_FILENAME’] 当前执行脚本的绝对路径
$_SERVER[‘SCRIPT_NAME’] 包含当前脚本的路径
$_SERVER[‘REQUSET_URI’] URI用来指定要访问的页面,例如.”/index.html”
$_SERVER[‘PATH_INFO’] 包含由客户端提供的,跟在真实脚本名称之后并且在查询句(querystring)之前的路径信息(如果存在).例如,当前脚本是通过URL http://www.example.com/php/path_info.php/some/stuff?foo=bar 被访问的,那么$_SERVER[‘SCRIPT_NAME’]将包含 /some/stuff

$_GET和$POST

get方法所传递的数据将会显示在浏览器的地址栏,而post方法不会.
创建一个index.html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>PHP处理表单2</title>
</head>
<body>
<center>
    <form action="get.php" method="get">
        <p>名字: <input type="text" name="fname"></p>
        <p>年龄: <input type="text" name="age"></p>
        <p> phone: <input type="password" name="phone" ></p>
        <p><input type="submit" value="提交"></p>

    </form>
</center>
</body>

然后创建get.php文件

echo $_GET['fname'].$_GET['phone'];



这样就可以得到.

$_FILES数组

用于获取通过post方法上传文件的相关信息,如果为单个文件上传,那么该数组为二维数组,如果为多个文件上传,则该数组为三维数组.

$_SESSION和$_COOKIE数组

$_COOKIE[]全局数组存储了通过了HTTP COOKIE传递脚本的信息,PHP可通过setcookie()函数设置COOKIE的值,用$_COOKIE[]数组接收COOKIE的值,$_COOKIE[]数组的索引为COOKIE的名称.
$_SESSION[]数组用于获取会话变量的相关信息.

$_REQUEST[]数组

默认情况下,$_REQUEST[]数组包含了$_GET.$_POST和$_COOKIE的数组.

www.phpzy.comtrue/php/6035.htmlTechArticlePhp(五)--数组,php--数组 Php(五)—数组 数组的类型 php中有两种类型的数组,即索引数组和关联数组.索引数组键由数字组成,(默认为索引数组),关联数组由字符串和数字混合组成. - 关联数组...

相关文章

相关频道:

PHP之友评论

今天推荐