PHP-lab04函数

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()函数调用可以同时运行吗?如果同时运行,其结果还一样吗?
参考:

不可以;一样(不确定)
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值