回复讨论(解决方案)
$base_num 不会被覆盖,
这与 php 的变量作用域有关,函数内的变量只在本函数内有效
也就是说,递归调用的 quick_sort 中的 $base_num 都是独立的
这一点与 js 不同,需要注意。当然 js 中可用 var 声明局部变量
每次执行都是函数体内的局部变量,除非是静态或全局变量才会改变
$base_num 不会被覆盖,
这与 php 的变量作用域有关,函数内的变量只在本函数内有效
也就是说,递归调用的 quick_sort 中的 $base_num 都是独立的
这一点与 js 不同,需要注意。当然 js 中可用 var 声明局部变量
你的意思是,我举个例子,比如:3,1,5,4
第一次穿进去把3拿出来做标尺,1,5,4以此和它做对比,小于它的在left数组,大于它的在right数组,$left=array(1); $right=array(5,4);
当$right再次递归时候,把5拿出来做标尺,4和它对比。那被做标尺的值3和5最后能在最后一行代码
return array_merge($left_array, array($base_num), $right_array);中找到,是这样吧。
这样看的清楚点
print_r(quick_sort(array(6,1,5,8,7,4,2,3,0)));function quick_sort($arr) { //先判断是否需要继续进行 $length = count($arr); if($length <= 1) { return $arr; } //如果没有返回,说明数组内的元素多于 1 个,需要排序 //选择一个标尺 //选择第一个元素 $base_num = $arr[0]; //遍历 除了标尺外所有元素,按照大小关系放入两个数组内 //初始化两个数组 $left_array = array(); //小于标尺的 $right_array = array(); //大于标尺的 for($i=1; $i<$length; $i++) { if($base_num > $arr[$i]) { //放入左边数组 $left_array[] = $arr[$i]; } else { //放入右边数组 $right_array[] = $arr[$i]; } }printf("in[%s] B[%d] L[%s] R[%s]<br>", join(',', $arr), $base_num, join(',', $left_array), join(',', $right_array)); //再分别对 左边 和 右边 得得数组进行相同的排序处理 //递归调用这个函数,并记录结果 $left_array = quick_sort($left_array); $right_array = quick_sort($right_array); //合并左边、标尺、右边 return array_merge($left_array, array($base_num), $right_array);}
in[6,1,5,8,7,4,2,3,0] B[6] L[1,5,4,2,3,0] R[8,7]in[1,5,4,2,3,0] B[1] L[0] R[5,4,2,3]in[5,4,2,3] B[5] L[4,2,3] R[]in[4,2,3] B[4] L[2,3] R[]in[2,3] B[2] L[] R[3]in[8,7] B[8] L[7] R[]Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7] => 7 [8] => 8 )
这样看的清楚点
print_r(quick_sort(array(6,1,5,8,7,4,2,3,0)));function quick_sort($arr) { //先判断是否需要继续进行 $length = count($arr); if($length <= 1) { return $arr; } //如果没有返回,说明数组内的元素多于 1 个,需要排序 //选择一个标尺 //选择第一个元素 $base_num = $arr[0]; //遍历 除了标尺外所有元素,按照大小关系放入两个数组内 //初始化两个数组 $left_array = array(); //小于标尺的 $right_array = array(); //大于标尺的 for($i=1; $i<$length; $i++) { if($base_num > $arr[$i]) { //放入左边数组 $left_array[] = $arr[$i]; } else { //放入右边数组 $right_array[] = $arr[$i]; } }printf("in[%s] B[%d] L[%s] R[%s]<br>", join(',', $arr), $base_num, join(',', $left_array), join(',', $right_array)); //再分别对 左边 和 右边 得得数组进行相同的排序处理 //递归调用这个函数,并记录结果 $left_array = quick_sort($left_array); $right_array = quick_sort($right_array); //合并左边、标尺、右边 return array_merge($left_array, array($base_num), $right_array);}
in[6,1,5,8,7,4,2,3,0] B[6] L[1,5,4,2,3,0] R[8,7]in[1,5,4,2,3,0] B[1] L[0] R[5,4,2,3]in[5,4,2,3] B[5] L[4,2,3] R[]in[4,2,3] B[4] L[2,3] R[]in[2,3] B[2] L[] R[3]in[8,7] B[8] L[7] R[]Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7] => 7 [8] => 8 )
这样看的清楚点
print_r(quick_sort(array(6,1,5,8,7,4,2,3,0)));function quick_sort($arr) { //先判断是否需要继续进行 $length = count($arr); if($length <= 1) { return $arr; } //如果没有返回,说明数组内的元素多于 1 个,需要排序 //选择一个标尺 //选择第一个元素 $base_num = $arr[0]; //遍历 除了标尺外所有元素,按照大小关系放入两个数组内 //初始化两个数组 $left_array = array(); //小于标尺的 $right_array = array(); //大于标尺的 for($i=1; $i<$length; $i++) { if($base_num > $arr[$i]) { //放入左边数组 $left_array[] = $arr[$i]; } else { //放入右边数组 $right_array[] = $arr[$i]; } }printf("in[%s] B[%d] L[%s] R[%s]<br>", join(',', $arr), $base_num, join(',', $left_array), join(',', $right_array)); //再分别对 左边 和 右边 得得数组进行相同的排序处理 //递归调用这个函数,并记录结果 $left_array = quick_sort($left_array); $right_array = quick_sort($right_array); //合并左边、标尺、右边 return array_merge($left_array, array($base_num), $right_array);}
in[6,1,5,8,7,4,2,3,0] B[6] L[1,5,4,2,3,0] R[8,7]in[1,5,4,2,3,0] B[1] L[0] R[5,4,2,3]in[5,4,2,3] B[5] L[4,2,3] R[]in[4,2,3] B[4] L[2,3] R[]in[2,3] B[2] L[] R[3]in[8,7] B[8] L[7] R[]Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7] => 7 [8] => 8 )
这个很直观!谢谢~

防止会话固定攻击的有效方法包括:1.在用户登录后重新生成会话ID;2.使用安全的会话ID生成算法;3.实施会话超时机制;4.使用HTTPS加密会话数据,这些措施能确保应用在面对会话固定攻击时坚不可摧。

实现无会话身份验证可以通过使用JSONWebTokens(JWT)来实现,这是一种基于令牌的认证系统,所有的必要信息都存储在令牌中,无需服务器端会话存储。1)使用JWT生成和验证令牌,2)确保使用HTTPS防止令牌被截获,3)在客户端安全存储令牌,4)在服务器端验证令牌以防篡改,5)实现令牌撤销机制,如使用短期访问令牌和长期刷新令牌。

PHP会话的安全风险主要包括会话劫持、会话固定、会话预测和会话中毒。1.会话劫持可以通过使用HTTPS和保护cookie来防范。2.会话固定可以通过在用户登录前重新生成会话ID来避免。3.会话预测需要确保会话ID的随机性和不可预测性。4.会话中毒可以通过对会话数据进行验证和过滤来预防。

销毁PHP会话需要先启动会话,然后清除数据并销毁会话文件。1.使用session_start()启动会话。2.用session_unset()清除会话数据。3.最后用session_destroy()销毁会话文件,确保数据安全和资源释放。

如何改变PHP的默认会话保存路径?可以通过以下步骤实现:在PHP脚本中使用session_save_path('/var/www/sessions');session_start();设置会话保存路径。在php.ini文件中设置session.save_path="/var/www/sessions"来全局改变会话保存路径。使用Memcached或Redis存储会话数据,如ini_set('session.save_handler','memcached');ini_set(

tomodifyDataNaphPsession,startTheSessionWithSession_start(),然后使用$ _sessionToset,修改,orremovevariables.1)startThesession.2)setthesession.2)使用$ _session.3)setormodifysessessvariables.3)emovervariableswithunset()

在PHP会话中可以存储数组。1.启动会话,使用session_start()。2.创建数组并存储在$_SESSION中。3.通过$_SESSION检索数组。4.优化会话数据以提升性能。

PHP会话垃圾回收通过概率机制触发,清理过期会话数据。1)配置文件中设置触发概率和会话生命周期;2)可使用cron任务优化高负载应用;3)需平衡垃圾回收频率与性能,避免数据丢失。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

记事本++7.3.1
好用且免费的代码编辑器

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

SublimeText3 英文版
推荐:为Win版本,支持代码提示!