PHP数据类型包括8种
array_values() 函数可以返回数组中所有的值并给其建立数字索引
<?php $arr = [0,1,2,3]; unset($arr[1]); $arr = array_values($arr); /* array (size=3) 0 => int 0 1 => int 2 2 => int 3 */ var_dump($arr); ?>
list()函数可以将数组中的值赋给变量
list($a,$b,$c) = [1,2,3]; echo $a;//1 echo $b;//2 echo $c;//3 // 仅接收其中一个 list(, , $power) = [1,2,3]; echo $power;//3 // list() 不能对字符串起作用 list($bar) = "abcde"; var_dump($bar); // NULL
回调函数是指将一个函数的函数名作为参数传到另一个函数中
function demo($num,$n){ for($i=0;$i<$num;$i++){ if($n($i)){ echo $i.'<br>'; } } } function test($i){ if($i%5){ return true; } } demo(20,'test');
递归函数
<?php function test( $n ) { echo $n; if($n>0){ test($n-1); } echo $n; } test(5);//543210012345 ?>
键值操作
array_values:array_values() 返回 input 数组中所有的值并给其建立数字索引(文档上面有介绍)
array_keys:array_keys() 返回 input 数组中的数字或者字符串的键名
array array_keys ( array $array [, mixed $search_value [, bool $strict = false ]] )
如果指定了可选参数 search_value,则只返回该值的键名。否则 input 数组中的所有键名都会被返回
如果指定了可选参数 strict,表示判断在搜索的时候是否该使用严格的比较(===)
<?php $array = array(0 => 100, "color" => "red"); //Array ( [0] => 0 [1] => color ) print_r(array_keys($array)); $array = array("blue", "red", "green", "blue", "blue"); // Array ( [0] => 0 [1] => 3 [2] => 4 ) print_r(array_keys($array, "blue")); $array = array("color" => array("blue", "red", "green"), "size" => array("small", "medium", "large")); Array ( [0] => color [1] => size ) print_r(array_keys($array)); ?>
in_array:in_array — 检查数组中是否存在某个值
bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )
如果第三个参数 strict 的值为 TRUE 则 in_array() 函数还会检查 needle 的类型是否和 haystack 中的相同
<?php $os = array("Mac", "NT", "Irix", "Linux"); if (in_array("Irix", $os)) { //Got Irix echo "Got Irix"; } if (in_array("mac", $os)) { echo "Got mac"; } ?>
array_flip:array_flip — 交换数组中的键和值,成功时返回交换后的数组,如果失败返回 NULL
array array_flip ( array $trans )
array_flip() 返回一个反转后的 array,例如 trans 中的键名变成了值,而 trans 中的值成了键名
如果同一个值出现了多次,则最后一个键名将作为它的值,所有其它的都丢失了
[注意]trans中的值需要能够作为合法的键名,例如需要是 integer 或者 string。如果值的类型不对将发出一个警告,并且有问题的键/值对将不会反转
<?php $trans = array("a" => 1, "b" => 1, "c" => 2); $trans = array_flip($trans); //Array ( [1] => b [2] => c ) print_r($trans); ?>
array_reverse:array_reverse — 返回一个单元顺序相反的数组
array array_reverse ( array $array [, bool $preserve_keys = false ] )
如果参数preserve_keys设置为 TRUE 会保留数字的键。非数字的键则不受这个设置的影响,总是会被保留
array_count_values:array_count_values — 统计数组中所有的值出现的次数
array array_count_values ( array $input )
<?php $array = array(1, "hello", 1, "world", "hello"); //Array ( [1] => 2 [hello] => 2 [world] => 1 ) print_r(array_count_values($array)); ?>
array_unique:array_unique — 移除数组中重复的值
array array_unique ( array $array [, int $sort_flags = SORT_STRING ] )
[注意]键名保留不变。array_unique() 先将值作为字符串排序,然后对每个值只保留第一个遇到的键名,接着忽略所有后面的键名。这并不意味着在未排序的 array 中同一个值的第一个出现的键名会被保留
<?php $input = array("a" => "green", "red", "b" => "green", "blue", "red"); $result = array_unique($input); //Array ( [a] => green [0] => red [1] => blue ) print_r($result); ?>
array_sum:array_sum — 计算数组中所有值的和,array_sum() 将数组中的所有值的和以整数或浮点数的结果返回
<?php $a = array(2, 4, 6, 8); //sum(a) = 20 echo "sum(a) = " . array_sum($a) . "\n"; $b = array("a" => 1.2, "b" => 2.3, "c" => 3.4); //sum(b) = 6.9 echo "sum(b) = " . array_sum($b) . "\n"; ?>
array_merge:array_merge — 合并一个或多个数组
array_intersect:array_intersect — 计算数组的交集
array 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); //Array ( [a] => green [0] => red ) print_r($result); ?>
array_diff:array_diff — 计算数组的差集
array array_diff ( array $array1 , array $array2 [, array $... ] )
对比返回在 array1 中但是不在 array2 及任何其它参数数组中的值
<?php $array1 = array("a" => "green", "red", "blue", "red"); $array2 = array("b" => "green", "yellow", "red"); $result = array_diff($array1, $array2); //Array ( [1] => blue ) print_r($result); ?>
array_fill:array_fill — 用给定的值填充数组,返回填充后的数组
array array_fill ( int $start_index , int $num , mixed $value )
array_fill() 用 value 参数的值将一个数组填充 num 个条目,键名由 start_index 参数指定的开始
?php $a = array_fill(5, 6, 'banana'); $b = array_fill(-2, 4, 'pear'); //Array ( [5] => banana [6] => banana [7] => banana [8] => banana [9] => banana [10] => banana ) print_r($a); //Array ( [-2] => pear [0] => pear [1] => pear [2] => pear ) print_r($b); ?>
栈和队列
array_pop:array_pop — 将数组最后一个单元弹出(出栈)
mixed array_pop ( array &$array )
array_pop() 弹出并返回 array 数组的最后一个单元,并将数组 array 的长度减一。如果 array 为空(或者不是数组)将返回 NULL
<?php $stack = array("orange", "banana", "apple", "raspberry"); $fruit = array_pop($stack); //Array ( [0] => orange [1] => banana [2] => apple ) print_r($stack); ?>
array_push:array_push — 将一个或多个单元压入数组的末尾(入栈),返回处理之后数组的元素个数
int array_push ( array &$array , mixed $var [, mixed $... ] )
array_push() 将 array 当成一个栈,并将传入的变量压入 array 的末尾。array 的长度将根据入栈变量的数目增加
<?php $stack = array("orange", "banana"); array_push($stack, "apple", "raspberry"); //Array ( [0] => orange [1] => banana [2] => apple [3] => raspberry ) print_r($stack); ?>
array_shift:array_shift — 将数组开头的单元移出数组
mixed array_shift ( array &$array )
array_shift() 将 array 的第一个单元移出并作为结果返回,将 array 的长度减一并将所有其它单元向前移动一位。所有的数字键名将改为从零开始计数,文字键名将不变
<?php $stack = array("orange", "banana", "apple", "raspberry"); $fruit = array_shift($stack); //Array ( [0] => banana [1] => apple [2] => raspberry ) print_r($stack); ?>
array_unshift:array_unshift — 在数组开头插入一个或多个单元,返回 array 数组新的单元数目
int array_unshift ( array &$array , mixed $var [, mixed $... ] )
array_unshift() 将传入的单元插入到 array 数组的开头。注意单元是作为整体被插入的,因此传入单元将保持同样的顺序。所有的数值键名将修改为从零开始重新计数,所有的文字键名保 持不变
<?php $queue = array("orange", "banana"); array_unshift($queue, "apple", "raspberry"); //Array ( [0] => apple [1] => raspberry [2] => orange [3] => banana ) print_r($queue); ?>
trim():该函数用于返回去掉字符串首尾空格的字符串
ltrim():ltrim函数用于删除字符串开头的空白字符(或其他字符)
rtrim():rtrim函数用于删除字符串末端的空白字符(或者其他字符)
strtolower():strtolower — 将字符串转化为小写
strtoupper():strtoupper — 将字符串转化为大写
ucfirst():ucfirst — 将字符串的首字母转换为大写
ucwords():ucwords — 将字符串中每个单词的首字母转换为大写
htmlspecialchars():把指定特殊符号转换成实体
addslashes():使用反斜线引用字符串,返回字符串
stripslashes(): 反引用一个引用字符串
strrev():strrev — 反转字符串
string strrev ( string $string )
<?php echo strrev("Hello world!"); // 输出 "!dlrow olleH" ?>
strlen():strlen — 获取字符串长度
md5():计算字符串的 MD5 散列值
strstr():查找字符串的首次出现,返回haystack字符串从needle第一次出现的位置开始到haystack结尾的字符串
string strstr ( string $haystack , mixed $needle [, bool $before_needle = false ] )
before_needle若为TRUE,strstr()将返回needle在haystack中的位置之前的部分
<?php $email = 'name@example.com'; $domain = strstr($email, '@'); echo $domain; // @example.com $user = strstr($email, '@', true); echo $user; //name ?>
strpos():strpos()查找字符串首次出现的位置
mixed strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )
<?php // 忽视位置偏移量之前的字符进行查找 $newstring = 'abcdef abcdef'; $pos = strpos($newstring, 'a', 1); // $pos = 7, 不是 0 ?>
strrpos():strrpos()计算指定字符串在目标字符串中最后一次出现的位置
int strrpos ( string $haystack , string $needle [, int $offset = 0 ] )
<?php $foo = "0123456789a123456789b123456789c"; var_dump(strrpos($foo, '7', -5)); // 从尾部第 5 个位置开始查找 // 结果: int(17) var_dump(strrpos($foo, '7', 20)); // 从第 20 个位置开始查找 // 结果: int(27) var_dump(strrpos($foo, '7', 28)); // 结果: bool(false) ?>
substr():substr()返回字符串的子串
string substr ( string $string , int $start [, int $length ] )
<?php $rest = substr("abcdef", -1); // 返回 "f" $rest = substr("abcdef", -2); // 返回 "ef" $rest = substr("abcdef", -3, 1); // 返回 "d" ?> <?php $rest = substr("abcdef", 0, -1); // 返回 "abcde" $rest = substr("abcdef", 2, -1); // 返回 "cde" $rest = substr("abcdef", 4, -4); // 返回 "" $rest = substr("abcdef", -3, -1); // 返回 "de" ?>
str_replace():str_replace()返回一个字符串或者数组。该字符串或数组是将 subject 中全部的 search 都被 replace 替换之后的结果
mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )
如果count被指定,它的值将被设置为替换发生的次数
<?php // 赋值: <body text='black'> $bodytag = str_replace("%body%", "black", "<body text='%body%'>"); // 赋值: Hll Wrld f PHP $vowels = array("a", "e", "i", "o", "u", "A", "E", "I", "O", "U"); $onlyconsonants = str_replace($vowels, "", "Hello World of PHP"); // 赋值: You should eat pizza, beer, and ice cream every day $phrase = "You should eat fruits, vegetables, and fiber every day."; $healthy = array("fruits", "vegetables", "fiber"); $yummy = array("pizza", "beer", "ice cream"); $newphrase = str_replace($healthy, $yummy, $phrase); // 赋值: 2 $str = str_replace("ll", "", "good golly miss molly!", $count); echo $count; ?>
分割:explode()
explode()使用一个字符串分割另一个字符串,返回由字符串组成的数组,每个元素都是string的一个子串,它们被字符串delimiter作为边界点分割出来
array explode ( string $delimiter , string $string [, int $limit ] )
如果设置了limit参数并且是正数,则返回的数组包含最多limit个元素,而最后那个元素将包含string的剩余部分;如果limit参数是负数,则返回除了最后的-limit个元素外的所有元素;如果limit是0,则会被当做1
<?php // 示例 1 $pizza = "piece1 piece2 piece3 piece4 piece5 piece6"; $pieces = explode(" ", $pizza); echo $pieces[0]; // piece1 echo $pieces[1]; // piece2 // 示例 2 $data = "foo:*:1023:1000::/home/foo:/bin/sh"; list($user, $pass, $uid, $gid, $gecos, $home, $shell) = explode(":", $data); echo $user; // foo echo $pass; // * ?>
implode():implode()将一个一维数组的值转化为字符串
string implode ( string $glue , array $pieces ) string implode ( array $pieces )
<?php $array = array('lastname', 'email', 'phone'); $comma_separated = implode(",", $array); echo $comma_separated; // lastname,email,phone // Empty string when using an empty array: var_dump(implode('hello', array())); // string(0) "" ?>