490 likes | 662 Views
输出数组. Result: Array ( [0] => zzu [1] => php [2] => MySQL [3] => javascript [4] => html [5] => css ). 创建数组. 语法 array ( [mixed ...] ) 可以用 array() 语言结构来新建一个 array. 它接受一定数量用逗号分隔的 key => value 参数对 .
E N D
输出数组 Result: Array( [0] => zzu [1] => php [2] => MySQL [3] => javascript [4] => html [5] => css)
创建数组 • 语法 array ( [mixed ...] )可以用 array() 语言结构来新建一个 array.它接受一定数量用逗号分隔的 key => value 参数对. • 注: array() 是一个语言结构,用于字面上表示数组,不是常规的函数. key 可以是 integer 或者 string, value 可以是任何值 • 创建一个数组 $arr = array(); • 创建一个数组并赋值 $arr = array(‘zzu','php','MySQL','javascript','html','css'); • 或者这样赋值: $array[] = ‘zzu';$array[] = 'php';$array[] = 'MySQL';$array[] = 'javascript';$array[] = 'html';$array[] = 'css'
创建数组 • 带键值的数组 $arr = array( ‘zzu' => 'www. zzu.edu.cn', 'php' => 'www.php.net', 'mysql' => 'www.mysql.com', 'apache' => 'www.apache.org'); • 或者这样赋值: $array[‘zzu'] = 'www. zzu.edu.cn';$array['php'] = 'www.php.net';$array['mysql'] = 'www.mysql.com';$array['apache'] = 'www.apache.org'; • 注意数组的最后一项是不能加逗号的,这样定义是错误的 array(‘zzu','php',);
创建数组 • 如果对给出的值没有指定键名,则取当前最大的整数索引值,而新的键名将是该值加1.如果不存在最大的整数索引值,则以0开始作为索引值.示例: <?php $arr = array( ‘zzu' => 'www.zzu.edu.cn', 'php' => 'www.php.net', 'www.mysql.com', 'www.apache.org');print_r($arr);?> Result: Array( [zzu] => www.zzu.edu.cn [php] => www.php.net [0] => www.mysql.com [1] => www.apache.org) • 上例中不存在最大的整数索引值,则以0开始作为索引值.
创建数组 <?php $arr = array( ‘zzu' => 'www. zzu.edu.cn', 'php' => 'www.php.net', 2 => 'www.mysql.com', 'www.apache.org');print_r($arr);?> • 上例中存在最大的整数索引值2,新的键名将为3 Result: Array( [zzu] => www. zzu.edu.cn [php] => www.php.net [2] => www.mysql.com [3] => www.apache.org)
创建数组 • 数组的键是唯一的,如果指定的键名已经有了值,则该值会被覆盖. <?php $array[‘zzu'] = 'www. zzu.edu.cn';$array['php'] = 'www.php.net';$array['mysql'] = 'www.mysql.com';$array['apache'] = 'www.apache.org';$array['mysql'] = '我覆盖掉mysql之前赋的值了';print_r($array);?> Result: Array( [zzu] => www. zzu.edu.cn [php] => www.php.net [mysql] => 我覆盖掉mysql之前赋的值了[apache] => www.apache.org)
创建数组 • 下面介绍一下range()函数range -- 建立一个包含指定范围单元的数组 说明array range ( mixed low, mixed high [, number step] );新参数: 可选的 step 参数是 PHP 5.0.0 新加的.如果给出了 step 的值,它将被作为单元之间的步进值.step 应该为正值.如果未指定,step 则默认为 1. <?php $arr = range(0,9);print_r($arr);?> Result: Array( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7] => 7 [8] => 8 [9] => 9)
创建数组 • 多维数组的定义 <?php $states = array( “Ohio” => array (“population” =>”11,353,140”, “capital” => “Columbs”), “Nebraska” =>array (“population” =>”1,711,263”,”captal” => “Omaha”) ) ?> • 如果引用Ohio的人口: $states[“Ohio”] [“population”] 这将返回以下值: 11,353,140
增加和删除数组元素 • PHP为扩大和缩小数组提供了一些函数.对于那些希望模仿各种堆栈、队列实现(FIFO等)的程序员来说,这些函数可以提供便利.顾名思义,从这些函数的函数名(push、pop、shift和unshift)就清楚地反映出其作用. • 队列与栈数据结构的区别:队列是先进先出(FIFO),栈是后进先出。 • 增加元素 $arrayname[ ] <?php $arr = array(‘zzu','php','MySQL','javascript');$arr[] = 'html';//增加一个元素插到最后$arr['css'] = 'css';//再增加一个元素插到最后print_r($arr);?> Result: Array( [0] => zzu [1] => php [2] => MySQL [3] => javascript [4] => html [css] => css)
增加和删除数组元素 • 删除元素 unset()用unset()删除一个数组变量,即使是数字索引,此函数也不会重新对数组索引示例: <?php $arr = array( ‘zzu' => 'www. zzu.edu.cn', 'php' => 'www.php.net', 'mysql' => 'www.mysql.com', 'apache' => 'www.apache.org');unset($arr['php']);print_r($arr);?> Result: Array( [zzu] => www. zzu.edu.cn [mysql] => www.mysql.com [apache] => www.apache.org)
增加和删除数组元素 • 上例中索引保持不变 <?php $arr = array(‘zzu','php','MySQL','javascript');unset($arr[1]);print_r($arr);?> Result: Array( [0] => zzu [2] => MySQL [3] => javascript)
增加和删除数组元素 • array_push()array_push()函数将variable增加到target_array的末尾,成功时返回TRUE,否则返回FALSE.这个和栈的入栈相似.可以为此函数传递多个变量作为输入参数,同时向数组压入多个变量(元素). <?php $arr = array(‘zzu','php','MySQL','javascript');array_push($arr,'html','css');print_r($arr);?> Result: Array( [0] => zzu [1] => php [2] => MySQL [3] => javascript [4] => html [5] => css)
增加和删除数组元素 • 注: 如果用 array_push() 来给数组增加一个单元,还不如用 $array[] = ,因为这样没有调用函数的额外负担. 注: 如果第一个参数不是数组,array_push() 将发出一条警告.这和 $var[] 的行为不同,后者会新建一个数组. • array_unshift ( array &$array, mixed $var [, mixed $...] )array_unshift() 将传入的单元插入到 array 数组的开头.注意单元是作为整体被插入的,因此传入单元将保持同样的顺序.所有的数值键名将修改为从零开始重新计数,所有的文字键名保持不变.函数的返回值是 array 数组新的单元数目. <?php$arr = array( 0 => 'www.php.net', 1 => 'www.mysql.com', 2 => 'www.apache.org');$zzu = 'www. zzu.edu.cn';$num = array_unshift($arr,$ zzu);echo "新的数组的长度是:".$num;echo "\r\n\r\n";print_r($arr);?>
增加和删除数组元素 • array_pop()array_pop()函数返回target_array的最后一个元素(出栈),并在结束后重置数组的指针. Result: 新的数组的长度是:4Array( [0] => www. zzu.edu.cn [1] => www.php.net [2] => www.mysql.com [3] => www.apache.org)
增加和删除数组元素 <?php $arr = array( ‘zzu' => 'www. zzu.edu.cn', 'php' => 'www.php.net', 'mysql' => 'www.mysql.com', 'apache' => 'www.apache.org');echo array_pop($arr);echo "\n\n";print_r($arr);?> Result: www.apache.orgArray( [zzu] => www. zzu.edu.cn [php] => www.php.net [mysql] => www.mysql.com)
增加和删除数组元素 • array_shift ( array &$array )array_shift() 将 array 的第一个单元移出并作为结果返回(出列),将 array 的长度减一并将所有其它单元向前移动一位.所有的数字键名将改为从零开始计数,文字键名将不变.如果 array 为空(或者不是数组),则返回 NULL.使用本函数后会重置数组指针. // Key为数字 <?php $arr = array(‘zzu','php','MySQL','javascript','html','css');echo array_shift($arr);echo "\n\n";print_r($arr);?> Result: zzuArray( [0] => php [1] => MySQL [2] => javascript [3] => html [4] => css)
增加和删除数组元素 • 键值为字符串 <?php $arr = array( ‘zzu' => 'www. zzu.edu.cn', 'php' => 'www.php.net', 'mysql' => 'www.mysql.com', 'apache' => 'www.apache.org');echo array_shift($arr);echo "\r\n\r\n";print_r($arr);?> Result: www. zzu.ed.cnArray( [php] => www.php.net [mysql] => www.mysql.com [apache] => www.apache.org)
增加和删除数组元素 • array array_pad ( array $input, int $pad_size, mixed $pad_value )array_pad()函数会修改target数组,将其大小增加到length指定的长度.这是通过在数组中填充由pad_value指定的值实现的.如果pad_value是正数,将填充到数组的右侧(后面);如果为负,则将填充到左侧(前面).如果length等于或小于当前大小,将不做任何操作.示例如下: <?php$input = array(12, 10, 9);$result = array_pad($input, 5, 0);// result is array(12, 10, 9, 0, 0)$result = array_pad($input, -7, -1);// result is array(-1, -1, -1, -1, 12, 10, 9)$result = array_pad($input, 2, "noop");// not padded?>
遍历数组 • count ( mixed var [, int mode] ) 计算数组中的单元数目或对象中的属性个数,返回 var 中的单元数目,通常是一个 array,任何其它类型都只有一个单元. 如果可选的 mode 参数设为 1,count() 将递归地对数组计数.对计算多维数组的所有单元尤其有用.mode 的默认值是 0 <?php $arr = array(‘zzu','php','MySQL','javascript','html','css');echo "数组长度:".count($arr);?> Result: 数组长度:6
遍历数组 • count ( mixed var [, int mode] ) 示例:带参数mode <?php $arr = array( ‘zzu' => 'www. zzu.edu.cn', 'php' => 'www.php.net', 'mysql' => 'www.mysql.com', 'apache' => 'www.apache.org');$array[] = ‘Zzu';$array[] = $arr;//数组的值又是一个数组$array[] = 'MySQL';$array[] = 'javascript';$array[] = 'html';$array[] = 'css';echo "不递归:".count($array)."\n";echo "递归:".count($array,1);?> Result: 不递归:6递归:10 • 注意:sizeof ( )函数是count( )别名。它们的功能是一样的。
遍历数组 • 我们随即来利用count来遍历一下数组 <?php $arr = array(‘zzu','php','MySQL','javascript','html','css');for($i=0;$i<count($arr);$i++){//一定要记得数组索引是从0开始的echo "第".$i."个元素是:".$arr[$i]."\n";}?> Result: 第0个元素是:zzu第1个元素是:php第2个元素是:MySQL第3个元素是:javascript第4个元素是:html第5个元素是:css • 很显然这种遍历只能适用与数字索引,并且是规则的数字索引那么想字符索引那些如何遍历呢?
遍历数组 • current( ) 语法形式:mixed current (arrary target_array) current( )函数返回target_array 数组当前指针位置的数组值。如果内部指针指向超出了单元列表的末端,current() 返回 FALSE。 • next () 语法形式:mixed next (arrary input_array) next( )函数返回input_array 中紧接这放在当前数组指针的下一个位置的数组值。 • 注意: current ( )与next ()函数不同,current ( )不移动指针,而next ( )函数需要移动指针。 <?php $arr = array( ‘zzu' => 'www. zzu.edu.cn', 'php' => 'www.php.net', 'mysql' => 'www.mysql.com', 'apache' => 'www.apache.org');while($value = current($arr)){ echo $value."\n"; next($arr);}?>
遍历数组 Result: www.phpfans.netwww.php.netwww.mysql.comwww.apache.org • 补充知识:list -- 把数组中的值赋给一些变量 • void list ( mixed ...) List ( )函数与array ( )函数类似,只是它可以在一次操作中从一个数组内提取多个值,同时为多个变量赋值。 <?php$info = array ('coffee', 'brown', 'caffeine');// Listing all the variableslist ($drink, $color, $power) = $info;print "$drink is $color and $power makes it special.\n"; ?> Result: coffee is brown and caffeine makes it special.
遍历数组 • each() • 语法形式: array each (array input_array) • 函数返回input_array的当前键/值对,并将指针推进一个位置. 键值对被返回为四个单元的数组,键名为 0,1,key和 value。单元 0和 key包含有数组单元的键名,1和 value包含有数据。如果执行each()前指针位于数组末尾,则返回FALSE.
遍历数组 • each ( )举例 <?php$foo = array ("bob", "fred", "jussi", "jouni", "egon", "marliese");$bar = each ($foo);print_r($bar);?> $bar现在包含有如下的键/值对: Array { [1] => bob [value] => bob [0] => 0 [key] => 0 }
遍历数组 • each()举例 <?php$foo = array ("Robert" => "Bob", "Seppo" => "Sepi");$bar = each ($foo);print_r($bar);?> $bar 现在包含有如下的键/值对: Array { [1] => Bob [value] => Bob [0] => Robert [key] => Robert }
遍历数组 • each() 经常和 list() 结合使用来遍历数组 。在执行 each() 之后,数组指针将停留在数组中的下一个单元或者当碰到数组结尾时停留在最后一个单元。如果要再用 each 遍历数组,必须使用 reset()。 <?php$arr = array( ‘zzu' => 'www. zzu.edu.cn', 'php' => 'www.php.net', 'mysql' => 'www.mysql.com', 'apache' => 'www.apache.org');while (list($key, $val) = each($arr)) { echo "$key => $val\n";}?> Result: zzu=> www. zzu.edu.cnphp => www.php.netmysql => www.mysql.comapache => www.apache.org
遍历数组 • 我们最常用的遍历数组的函数是foreachforeach 控制结构是专门用于数组的.它提供了一个简单的方法来遍历数组. foreach (array_expression as $value) statementforeach (array_expression as $key => $value) statement 第一种格式遍历给定的 array_expression 数组.每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元). 第二种格式做同样的事,只除了当前单元的键名也会在每次循环中被赋给变量 $key <?php $arr = array( ‘zzu' => 'www. zzu.edu.cn', 'php' => 'www.php.net', 'mysql' => 'www.mysql.com', 'apache' => 'www.apache.org');foreach($arr as $value){ echo $value."\n";}?>
遍历数组 Result: www. zzu.edu.cnwww.php.netwww.mysql.comwww.apache.org <?php $arr = array( ‘zzu' => 'www. zzu.edu.cn', 'php' => 'www.php.net', 'mysql' => 'www.mysql.com', 'apache' => 'www.apache.org');foreach($arr as $key => $value){ echo $key."=>".$value."\n";}?>
遍历数组 Result: zzu=>www.zzu.edu.cn php=>www.php.netmysql=>www.mysql.comapache=>www.apache.org
有用函数 • array array_merge ( array array1 [, array array2 [, array ...]] )array_merge()将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面.返回作为结果的数组. 如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值.然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面. <?php$array1 = array ("color" => "red", 2, 4);$array2 = array ("a", "b", "color" => "green", "shape" => "trapezoid", 4);$result = array_merge ($array1, $array2);print_r($result);?> Result: Array( [color] => green [0] => 2 [1] => 4 [2] => a [3] => b [shape] => trapezoid [4] => 4)
有用函数 • array array_merge ( array array1 [, array array2 [, array ...]] )array_merge()将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面.返回作为结果的数组. 如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值.然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面. <?php$array1 = array(1 => "php爱好者站");$array2 = array(3 => 'www. zzu.edu.cnt');$result = array_merge($array1, $array2);print_r($result);?> Result: Array( [0] => php爱好者站[1] =>www.zzu.edu.cn)
有用函数 • array array_merge ( array array1 [, array array2 [, array ...]] )array_merge()将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面.返回作为结果的数组. 如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值.然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面. • 如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引. <?php$array1 = array();$array2 = array(1 => "data");$result = array_merge($array1, $array2);?> Array( [0] => data) 注意:数字键名将会被重新编号
有用函数 • 如果你想完全保留原有数组并只想新的数组附加到后面,用 + 运算符: <?php$array1 = array(1 => "php爱好者站");$array2 = array(3 => 'www. zzu.edu.cn');$result = $array1 + $array2;print_r($result);?> Result: Array( [1] => php爱好者站[3] => www. zzu.edu.cn)
有用函数 • array_merge_recursive() • array_merge_recursive()函数与array_merge()相同,可以将两个或多个数组合并在一起,形成一个联合的数组.两者之间的区别在于,当某个输入数组中的某个键已经存在于结果数组中时会以怎样的处理方式.array_merge()会覆盖前面存在的键/值对,替换为当前输入数组中的键/值对,而array_merge_recursive()将把两个值合并在一起,形成一个新的数组,并以现有的键作为数组名.示例如下: <?php$array1 = array('welcome' =>'欢迎光临', 'name' => "phpfans");$array2 = array('name' => 'php爱好者站', 'url' => 'www.phpfans.net');$result1 = array_merge($array1, $array2);print_r($result1);echo "\n";$result2 = array_merge_recursive($array1, $array2);print_r($result2);?>
有用函数 Result: Array( [welcome] => 欢迎光临[name] => php爱好者站[url] => www.phpfans.net)Array( [welcome] => 欢迎光临[name] => Array ( [0] => phpfans [1] => php爱好者站) [url] => www.phpfans.net)
有用函数 • 说了数组的合并,如何将数组的所有元素合并成一个字符串呢?php中提供了方便的函数implode • implode(string glue, array pieces)本函数将数组的内容组合成一个字符串,参数 glue 是字之间的分隔符号. <?php $arr['name'] = 'php爱好者站';$arr['teach'] = '系列教程';$arr['url'] = 'www.phpfans.net';$str = implode(',',$arr);echo $str;?> Result: php爱好者站,系列教程,www.phpfans.net
有用函数 • array_slice() 返回根据 offset 和 length 参数所指定的 array 数组中的一段序列. • array_slice ( array $array, int $offset [, int $length] ) • 如果 offset 非负,则序列将从 array 中的此偏移量开始.如果 offset 为负,则序列将从 array 中距离末端这么远的地方开始. <?php $arr = array( 'www.zzu.edu.cn', 'www.php.net', 'www.mysql.com', 'www.apache.org');$array1 = array_slice($arr,0,2);$array2 = array_slice($arr,-3,2); print_r($array1);echo "\n";print_r($array2);echo "\n";
有用函数 Result: Array( [0] => www.phpfans.net [1] => www.php.net)Array( [0] => www.php.net [1] => www.mysql.com)
有用函数 • array array_splice ( array &$input, int $offset [, int $length [, array $ replacement ]] ) • array_splice() 把 input 数组中由 offset 和 length 指定的单元去掉,如果提供了 replacement 参数,则用 replacement 数组中的单元取代.返回一个包含有被代替后的数组.注意 input 中的数字键名不被保留. • 如果 offset 为正,则从 input 数组中该值指定的偏移量开始移除.如果 offset 为负,则从 input 末尾倒数该值指定的偏移量开始移除,并以数组的形式返回所删除的元素。 • 如果省略 length,则移除数组中从 offset 到结尾的所有部分.如果指定了 length 并且为正值,则移除这么多单元.如果指定了 length 并且为负值,则移除从 offset 到数组末尾倒数 length 为止中间所有的单元,并以数组的形式返回所删除的元素。
有用函数 <?php $arr = array( ‘www.zzu.edu.cn’, ‘www.php.net’, ‘www.mysql.com’, ‘www.apache.org’);$arr1 = $arr;$array1 = array_splice($arr1,2);print_r($arr1);echo “\n”;print_r($array1);echo “\n”;$arr2 = $arr;array_splice($arr2,2,1);print_r($arr2);echo “\n”;$arr3 = $arr;$arr_replacement = array(‘php学习','php官方');array_splice($arr3,2,1,$arr_replacement);print_r($arr3);?>
有用函数 Array( [0] => www.zzu.edu.cnt [1] => www.php.net)Array( [0] => www.mysql.com [1] => www.apache.org)Array( [0] => www.zzu.edu.cn [1] => www.php.net [2] => www.apache.org)Array( [0] => www. zzu.edu.cn [1] => www.php.net [2] => php爱好者[3] => php官方[4] => www.apache.org)
有用函数 • array_intersect ( array $array1, array $array2 [, array $ ...] )array_intersect() 返回一个数组,该数组包含了所有在 array1 中也同时出现在所有其它参数数组中的值.注意键名保留不变。 <?php$array1 = array ("a" => "green", "red", "blue");$array2 = array ("b" => "green", "yellow", "red");$result = array_intersect ($array1, $array2);?> 这使得 $result成为: Array( [a] => green [0] => red) 注: 两个单元仅在 (string) $elem1 === (string) $elem2 时被认为是相同的。 也就是说,当字符串的表达是一样的时候。
有用函数 • array_intersect_assoc() 返回一个数组,该数组包含了所有在 array1中也同时出现在所有其它参数数组中的值。注意和 array__intersect() 不同的是键名也用于比较。 • array array_intersect_assoc ( array array1, array array2 [, array ...]) <?php$array1 = array ("a" => "green", "b" => "brown", "c" => "blue", "red");$array2 = array ("a" => "green", "yellow", "red");$result_array = array_intersect_assoc($array1, $array2);/* $result_array will look like:Array( [a] => green)*/?> 上面例子中可以看到只有键值对 “a” => “green” 在两个数组中都存在从而被返回。 值 "red" 没有被返回是因为在 $array1 中它的键名是 0 而在 $array2 中 "red" 的键名是 1。
有用函数 • 排序函数,我们也知道一些排序算法,如冒泡排序、堆排序、希尔排序和快速排序.排序在编程中经常用到.PHP提供了能以多种不同方式对数组排序的大量有用的函数,从而简化了这个过程.这也体现了php是非常方便的.下面将详细结束这些函数 • Void sort ( array &$array [, int $sort_flags] )sort()函数会对target_array进行排序,各元素按值由低到高的顺序排列.注意,它并不是返回排序后的数组.相反,它只是对当前数组排序,不论结果如何都不返回任何值.注意: 本函数为 array 中的单元赋予新的键名.这将删除原有的键名而不仅是重新排序. <?php $arr = array(5,2,6,8,4,1);sort($arr);print_r($arr);?> Array( [0] => 1 [1] => 2 [2] => 4 [3] => 5 [4] => 6 [5] => 8) • 可以看到键值关联不再保持.
有用函数 • asort ( array &$array [, int $sort_flags] )本函数对数组进行排序,数组的索引保持和单元的关联.主要用于对那些单元顺序很重要的结合数组进行排序. <?php $arr = array(5,2,6,8,4,1);asort($arr);print_r($arr);?> Array( [5] => 1 [1] => 2 [4] => 4 [0] => 5 [2] => 6 [3] => 8) • 可以看到键值保持不变.
有用函数 • rsort ( array &$array [, int $sort_flags] )rsort()函数与sort()相同,只是它以相反的顺序(降序)对数组元素排序.示例如下: <?php $arr = array(5,2,6,8,4,1);rsort($arr);print_r($arr);?> Array( [0] => 8 [1] => 6 [2] => 5 [3] => 4 [4] => 2 [5] => 1)
有用函数 • arsort ( array &$array [, int $sort_flags] )arsort()函数与asort()相同,只是它以相反的顺序(降序)对数组元素排序.示例如下: <?php $arr = array(5,2,6,8,4,1);arsort($arr);print_r($arr);?> Array( [3] => 8 [2] => 6 [0] => 5 [4] => 4 [1] => 2 [5] => 1)
有用函数 • Isset • bool isset ( mixed var [, mixed var [, ...]])如果 var存在则返回 TRUE,否则返回 FALSE; • isset() 只能用于变量,因为传递任何其它参数都将造成解析错误。 <?php$a = array ('test' => 1, 'hello' => NULL);var_dump( isset ($a['test']) ); // TRUEvar_dump( isset ($a['foo']) ); // FALSEvar_dump( isset ($a['hello']) ); // FALSE ?>