lab04函数
(1)已知在项目中有两个文件,其中文件sum_function.php中定义了一个函数,函数原型如:int sum_fun(int $num1, int $num2);函数返回两个参数之和。在同一目录下的另外一个文件result.php 中包含第一个文件,定义两个变量并初始化,调用 sum_fun求出两个变量之和,并输出。请分别写出两个文件中的全部代码。
参考:
sum_function.php
<?php
// 定义一个函数,接受两个整数参数并返回它们的和
function sum_fun( $num1, $num2) {
$sum = $num1 + $num2;
return $sum;
}
?>
result.php
<?php
include 'sum_function.php';
$num1 = 5;
$num2 = 10;
$result = sum_fun($num1, $num2);
echo "两个变量之和是:".$result;
?>
(2)有数组如下:
$multi_arr=array(
array(1,2,array(3,array(41,42))),
array(5,array(6,7),8),
array(array(9,10,array(101,102)),11,12)
);
2-1)请设计合适的递归函数,对任意维度的数组进行遍历。遍历数组,并输出所有值: (通过输出来证明遍历)
1 2 3 41 42 5 6 7 8 9 10 101 102 11 12
参考:
<?php
function test2($arr)
{
foreach ($arr as $item) {
if (is_array($item)) {
test2($item); // 递归调用自身处理子数组
} else {
echo $item . " "; // 输出非数组元素的值
}
}
}
$multi_arr = array(
array(1, 2, array(3, array(41, 42))),
array(5, array(6, 7), 8),
array(array(9, 10, array(101, 102)), 11, 12)
);
test2($multi_arr);
?>
2-2)第一个要求的功能也可以使用PHP的内置函数array_walk_recursive()实现。array_walk_recursive()函数实现对数组的递归遍历功能。其可接收两个参数。第一个参数为要遍历的数组,第二个参数为对每个数组元素需要执行的回调函数。设计合适的匿名函数作为回调函数,完成相同的功能。
参考:
<?php
$multi_arr = array(
array(1, 2, array(3, array(41, 42))),
array(5, array(6, 7), 8),
array(array(9, 10, array(101, 102)), 11, 12)
);
function test2($item, $key)
{
echo $item . " ";
}
array_walk_recursive($multi_arr, 'test2');
?>
2-3)如果想把第1个要求中的数组中的所有元素都乘以10,从而改变这个数组,如何实现?
参考:
<?php
function multiply($arr, $factor)
{
$result = array();
foreach ($arr as $item) {
if (is_array($item)) {
$result[] = multiply($item, $factor); // 递归调用自身处理子数组
} else {
$result[] = $item * $factor; // 将元素乘以指定的因子并添加到新数组
}
}
return $result;
}
$multi_arr = array(
array(1, 2, array(3, array(41, 42))),
array(5, array(6, 7), 8),
array(array(9, 10, array(101, 102)), 11, 12)
);
$new_multi_arr = multiply($multi_arr, 10);
function printNewArray($arr)
{
foreach ($arr as $item) {
if (is_array($item)) {
printNewArray($item);
} else {
echo $item . " ";
}
}
}
printNewArray($new_multi_arr);
?>
(3)验证并回答问题,需要用实验结果说明你的答案。
3-1)过程
过程,一般是指实现某种副作用的函数。它结果依赖于某种可变的状态,比如以下代码的结果依赖于$i的状态和标准输出的状态(在屏幕上显示的字体、位置等):
<?php
function func() {
static $i=0;
$i++;
echo $i;
}
func() . "<br />";
func() . "<br />";
func() . "<br />";
?>
假设此段代码交给多核CPU处理,3个func()函数调用可以同时运行吗?如果同时运行,其结果还一样吗?
参考:
不可以;不一样
3-2)函数
狭义的函数则是输出结果只取决于参数。完全不依赖于系统状态的一种计算过程,它必须要有返回值,并且能够保证相同的输入永远得到相同的输出。比如:
<?php
function cycle_area($r) {
return pi() * $r * $r;
}
$n = cycle_area(1) + cycle_area(2) + cycle_area(3);
echo $n;
?>
假设此段代码交给多核CPU处理,3个cycle_area()函数调用可以同时运行吗?如果同时运行,其结果还一样吗?
参考:
不可以;一样(不确定)