PHP 数组详解之函数【一】

  1. 1.         判断查找
    in_array()函数判断数组是否包含某元素;
    array_search()在数组中搜索特定值并返回索引号/键名,如果不存在则返回false。
  2. 2.         数组排序
    sort()/rsort()保持键的位置,依值排序;
    asort()/arsort()依值排序,保持键值对应;
    ksort()/krsort()依键排序,保持键值对应;
    natsort()/natcasesort()按自然顺序重排,保持键值对应;
    shuffle()随机排序。
    array_reverse()逆转数组。
  3. 3.         统计计算
    count()数组元素计数;
    min()数组最小值;
    max()数组最大值;
    arrary_sum()数组求和。

< xmlnamespace prefix ="o" ns ="urn:schemas-microsoft-com:office:office" />

实验步骤

一、数组的特殊变换

  1. 1.         变量组合成数组

compact()函数可以通过变量名的字符串清单来将相关变量组合成一个关联数组。请阅读并运行以下代码,理解compact()函数的用法。

<html>

<body>

<pre>

<?php

$zero = 0;

$one = 1;

$two = 2;

$three = 3;

$arr = compact("zero", "one", "two", "three");

print_r($arr);

?>

</pre>

</body>

</html>

  1. 2.         数组分拆为变量

除了使用list()操作符从数组中抽取变量外,PHP还可以使用extract()函数来抽取变量。请阅读并运行以下代码,理解extract()函数从数组抽取变量的方法。
注:代码中的常量EXTR_PREFIX_ALL是用于说明抽取为变量时全部加上前缀;常量EXTR_REFS则表示抽取的变量为数组元素的引用(变量引用容易误解,尽量少用)。

<html>

<body>

<pre>

<?php

$arr1 = array("zero", "one", "two", "three");

extract($arr1, EXTR_PREFIX_ALL, "var");

echo $var_0 . "<br />";

echo $var_1 . "<br />";

echo $var_2 . "<br />";

echo $var_3 . "<br />";

echo "<br />";

$var_0 .= " is 0";

echo $var_0 . "<br />";;

print_r($arr1);

echo "<hr />";

$arr2 = array("math" => 95, "english" => 75);

extract($arr2, EXTR_REFS | EXTR_PREFIX_ALL, "score");

echo $score_math . "<br />";

echo $score_english . "<br />";

echo "<br />";

$score_math += 3;

$score_english -= 5;

print_r($arr2);

?>

</pre>

</body>

</html>

  1. 3.         数组分解

array_keys()和array_values()函数可以将数组的键名和值分别抽取出来形成新的数组。请阅读并运行以下代码,理解array_keys()和array_values()函数的用法。

<html>

<body>

<pre>

<?php

$arr = array("zero" =>0, "one" => 1, "two" =>2, "three" =>3);

$keys = array_keys($arr);

$values = array_values($arr);

print_r($keys);

print_r($values);

?>

</pre>

</body>

</html>

  1. 4.         数组合并

array_combine()函数可以将一个包含键名的数组和一个包含值的数组并成一个关联数组。注意:array_combine()函数要求两个数组参数具有相同的元素个数。请阅读并运行以下代码,理解array_combine()函数的用法。

<html>

<body>

<pre>

<?php

$keys = array("zero", "one", "two", "three");

$values = array(0, 1, 2, 3);

$arr = array_combine($keys, $values);

print_r($arr);

?>

</pre>

</body>

</html>

  1. 5.         数组转为字符串

implode()函数可以将一个数组的所有值转为一个字符串;用它的第1个参数指定元素间的分隔符。注意:转换后的字符串并不包含键名。请阅读并运行以下代码,理解implode()函数的用法。

<html>

<body>

<pre>

<?php

$arr = array("zero" =>0, "one" => 1, "two" =>2, "three" =>3);

$str = implode(",", $arr);

echo $str;

?>

</pre>

</body>

</html>

  1. 6.         数组初始化为序列

range()函数可以返回一个数值区间的序列,其第1个参数是开始值,第2个参数是结束值,可选的第3个参数是步长。请阅读并运行以下代码,理解range()函数的用法。

<html>

<body>

<pre>

<?php

$arr1 = range(0,5);

$arr2 = range(0,10,2);

$arr3 = range(0, -1, -0.1);

$arr4 = range(‘e‘, ‘a‘, -1);

$arr5 = range(‘A‘, ‘z‘); // 在字符集中大写是排在小写前面的

print_r($arr1);

print_r($arr2);

print_r($arr3);

print_r($arr4);

print_r($arr5);

?>

</pre>

</body>

</html>

二、判断查找

  1. 1.         in_array()

运行以下程序,观察程序运行结果,理解in_array()的使用方式。注:range函数可产生系列数字组成的数组。

<html>

<body>

<pre>

<?php

$arr1 = range(0, 9);

echo "数组arr1为:" ;

print_r($arr1);

if (in_array(1, $arr1)) {

echo "1在数组arr1中。";

} else {

echo "1不在数组arr1中。";

}

$arr2 = range(0,9,2);

echo "<hr />数组arr2为:" ;

print_r($arr2);

if (in_array(1, $arr2)) {

echo "1在数组arr2中。";

} else {

echo "1不在数组arr2中。";

}

?>

</pre>

</body>

</html>

  1. 2.         arrary_search()

运行以下程序,观察程序运行结果,理解array_search()的使用方式。

<html>

<body>

<pre>

<?php

$arr1 = range(0, 9);

echo "数组arr1为:" ;

print_r($arr1);

$key = array_search(1, $arr1);

echo var_dump($key);

$arr2 = range(0,9,2);

echo "<hr />数组arr2为:" ;

print_r($arr2);

$key = array_search(1, $arr2);

echo var_dump($key);

$arr3 = array("zero" => 0, "one" => 1, "two" => 2, "three" => 3);

echo "<hr />数组arr3为:" ;

print_r($arr3);

$key = array_search(1, $arr3);

echo var_dump($key);

?>

</pre>

</body>

</html>

通过以上实验,可以知道:如果要查找的元素在索引数组的0号位置,array_search将返回什么?          。

三、数组排序

注意:PHP的排序函数都是对原数组进行修改的。

  1. 1.         请阅读并运行以下代码,观察运行结果。

<html>

<body>

<pre>

<?php

$arr = array(

"zero" => "number:0-零",

"one" => "number:1-壹",

"two" => "number:2-贰",

"three" => "number:3-叁",

"four" => "number:4-肆",

"five" => "number:5-伍",

"six" => "number:6-陆",

"seven" => "number:7-柒",

"eight" => "number:8-捌",

"nine" => "number:9-玖",

"ten" => "number:10-拾",

"GE" => "NUMBER:1-个",

"SHI" => "NUMBER:10-十",

"BAI" => "NUMBER:100-百",

"QIAN" => "NUMBER:1000-千");

echo "原数组:";

print_r($arr);

echo "排序后:";

sort($arr);

print_r($arr);

?>

</pre>

</body>

</html>

请将代码中的sort函数分别换成rsort、asort()/arsort()、ksort()/krsort()、natsort()/natcasesort()、shuffle()和array_reverse()观察运行效果。使用哪一个函数会得到下面的排列顺序?          。

Array
(
    [zero] => number:0-零
    [GE] => NUMBER:1-个
    [one] => number:1-壹
    [two] => number:2-贰
    [three] => number:3-叁
    [four] => number:4-肆
    [five] => number:5-伍
    [six] => number:6-陆
    [seven] => number:7-柒
    [eight] => number:8-捌
    [nine] => number:9-玖
    [SHI] => NUMBER:10-十
    [ten] => number:10-拾
    [BAI] => NUMBER:100-百
    [QIAN] => NUMBER:1000-千
)

四、统计计算

请阅读并运行以下代码,观察运行结果,理解count()、min()、max()和array_sum()函数的功能。

<html>

<body>

<pre>

<?php

$arr = range(0, 10, 2);

print_r($arr);

echo "共有元素". count($arr) . "个;";

echo "最小值是". min($arr) . ";";

echo "最大值是". max($arr) . ";";

echo "元素和是". array_sum($arr) . "。";

?>

</pre>

</body>

</html>

五、数组的高级操作

以下函数array_map()、array_filter()和array_reduce()可以实现大量的数据处理,简化编程而不必写循环语句。注意这3个函数是返回新生成的数组,并不会修改原数组。后面的示例使用到的匿名函数需要PHP 5.3或以上才支持。

  1. 1.         数组映射

以下代码中,$double那句的语法含义是:定义一个匿名函数并赋值给变量$double。

请观察运行结果,理解array_map()的用法。

<html>

<body>

<pre>

<?php

function cube($n)

{

return($n * $n * $n);

}

$a = range(0,5);

$b = array_map("cube", $a);

print_r($b);

$double = function($value) {

return $value * 2;

};

$a = range(0, 5);

$b = array_map($double, $a);

print_r($b);

?>

</pre>

</body>

</html>

  1. 2.         数组过滤

请观察运行结果,理解array_filter()的用法。

<html>

<body>

<pre>

<?php

$func = function ($value) {

if ($value>5 && $value<10) {

return true;

} else {

return false;

}

};

$a = range(0, 20);

$b = array_filter($a, $func);

print_r($b);

?>

</pre>

</body>

</html>

  1. 3.         数组累积

请观察运行结果,理解array_reduce()的用法。array_reduce的功能就是将回调函数迭代的作用在数组的每一个元素上,从而将数组简化成单一值;第三个参数为迭代器的初始值。

<html>

<body>

<pre>

<?php

function rsum($v, $w)

{

$v += $w;

return $v;

}

function rmul($v, $w)

{

$v *= $w;

return $v;

}

$a = range(1, 5);

$x = array();

echo array_reduce($a, "rsum") . "<br />"; // 1+2+3+4+5

echo array_reduce($a, "rmul", 10) . "<br />"; // 10 * 1*2*3*4*5

echo array_reduce($x, "rsum", 100) . "<br />"; // 100 + 0(NULL)

?>

</pre>

</body>

</html>

六、设计练习

  1. 1.         以下代码的运行结果与期望的不相符,请找出错误原因。提示:请从PHP中与false的等价值方面考虑。

<html>

<body>

<pre>

<?php

$arr1 = range(0, 9);

echo "数组arr1为:" ;

print_r($arr1);

$key = array_search(0, $arr1);

if ($key != false) {

echo "0在数组arr1中,索引/键名是 $key 。";

} else {

echo "0不在数组arr1中。";

}

?>

</pre>

</body>

</html>

以上代码错误原因在于,应该如何修改?

时间: 2024-12-14 00:53:15

PHP 数组详解之函数【一】的相关文章

详解JMeter函数和变量(转载)

详解JMeter函数和变量(1) JMeter函数可以被认为是某种特殊的变量,它们可以被采样器或者其他测试元件所引用.函数调用的语法如下: ${__functionName(var1,var2,var3)} 其中,__functionName匹配被调用的函数名称.用圆括号包含函数的形参,例如${__time(YMD)},不同函数要求的参数也不同.有些JMeter函数不要求参数,则可以不使用圆括号,例如${__threadNum}. 如果一个函数的参数中包含逗号,那么必须对逗号进行转义(使用"\&

详解JMeter函数和变量

详解JMeter函数和变量(1) JMeter函数可以被认为是某种特殊的变量,它们可以被采样器或者其他测试元件所引用.函数调用的语法如下: ${__functionName(var1,var2,var3)} 其中,__functionName匹配被调用的函数名称.用圆括号包含函数的形参,例如${__time(YMD)},不同函数要求的参数也不同.有些JMeter函数不要求参数,则可以不使用圆括号,例如${__threadNum}. 如果一个函数的参数中包含逗号,那么必须对逗号进行转义(使用"\&

ViewPager 详解(二)---详解四大函数

前言:上篇中我们讲解了如何快速实现了一个滑动页面,但问题在于,PageAdapter必须要重写的四个函数,它们都各有什么意义,在上节的函数内部为什么要这么实现,下面我们就结合Android的API说明,详细讲解一下. 相关文章: 1.<ViewPager 详解(一)---基本入门> 2.<ViewPager 详解(二)---详解四大函数> 3.<ViewPager 详解(三)---PagerTabStrip与PagerTitleStrip添加标题栏的异同> 4.<

BIT 树状数组 详解 及 例题

(一)树状数组的概念 如果给定一个数组,要你求里面所有数的和,一般都会想到累加.但是当那个数组很大的时候,累加就显得太耗时了,时间复杂度为O(n),并且采用累加的方法还有一个局限,那就是,当修改掉数组中的元素后,仍然要你求数组中某段元素的和,就显得麻烦了.所以我们就要用到树状数组,他的时间复杂度为O(lgn),相比之下就快得多.下面就讲一下什么是树状数组: 一般讲到树状数组都会少不了下面这个图: 下面来分析一下上面那个图看能得出什么规律: 据图可知:c1=a1,c2=a1+a2,c3=a3,c4

算法学习笔记 KMP算法之 next 数组详解

最近回顾了下字符串匹配 KMP 算法,相对于朴素匹配算法,KMP算法核心改进就在于:待匹配串指针 i 不发生回溯,模式串指针 j 跳转到 next[j],即变为了 j = next[j]. 由此时间复杂度由朴素匹配的 O(m*n) 降到了 O(m+n), 其中模式串长度 m, 待匹配文本串长 n. 其中,比较难理解的地方就是 next 数组的求法.next 数组的含义:代表当前字符之前的字符串中,有多大长度的相同前缀后缀,也可看作有限状态自动机的状态,而且从自动机的角度反而更容易推导一些. "前

PHP的ob_start函数用法详解[php函数]

用PHP的ob_start();控制您的浏览器cache Output Control 函数可以让你自由控制脚本中数据的输出.它非常地有用,特别是对于:当你想在数据已经输出后,再输出文件头的情况.输出控制函数不对使用 header() 或 setcookie(), 发送的文件头信息产生影响,只对那些类似于 echo() 和 PHP 代码的数据块有作用. 我们先举一个简单的例子,让大家对Output Control有一个大致的印象: Example 1. CODE<?php ob_start();

(转)awk数组详解及企业实战案例

awk数组详解及企业实战案例 原文:http://www.cnblogs.com/hackerer/p/5365967.html#_label03.打印数组:1. [[email protected] test]# awk 'BEGIN{array[1]="zhurui";array[2]="zhuzhu";for(key in array) print key,array[key]}'2. 1 zhurui3. 2 zhuzhu4. [[email protect

“全栈2019”Java第二十八章:数组详解(上篇)

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第二十八章:数组详解(上篇) 下一章 "全栈2019"Java第二十九章:数组详解(中篇) 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Java学习小组"

“全栈2019”Java第三十章:数组详解(下篇)

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第三十章:数组详解(下篇) 下一章 "全栈2019"Java第三十一章:二维数组和多维数组详解 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Java学习小组&qu