TestController.php 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. class TestController extends Controller
  5. {
  6. public function index(){
  7. // //dd($this->testMaxLengthStr('abcabcbb'));
  8. // //dd($this->quickSort([2,3,1,3,5,2]));
  9. // dd($this->binLoop([1,2,3,4,5],2));
  10. // //dd($this->testArray());
  11. // dd($this->binary_search([1,2,3,4,5],5));
  12. // $arr = [1,2,3,4,5];
  13. // dd($this->binary_search_recursion($arr,2, 0, count($arr)));
  14. $a = 6;
  15. xdebug_debug_zval('a');
  16. $b = $a;
  17. xdebug_debug_zval('a');
  18. unset($b);
  19. xdebug_debug_zval('a');
  20. }
  21. public function testArray(){
  22. $a = array(1,2,5,6);
  23. $b = array(1,2,7);
  24. // $a=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");
  25. // $b=array("a"=>"purple","b"=>"orange");
  26. //var_dump(array_combine($a,$b)); //将$a中的value作为$b中对应的key,元素个数必须一致。
  27. //var_dump(range(2,6)); //[2,3,4,5,6]
  28. // $firstname = "Peter";
  29. // $lastname = "Griffin";
  30. // $age = "41";
  31. //return compact("firstname", "lastname", "age"); //变量作为key ["firstname" => "Peter","lastname"=> "Griffin","age"=>"41"]
  32. //return array_chunk($b,1); //以最大长度分割数组
  33. //return array_merge($a,$b); //合并
  34. return array_merge_recursive(); //合并 如果数组中有完全一样的键,将它们递归合并
  35. //return array_slice($b,0,1,false);//截取
  36. //return array_diff($a,$b); //a相对于b的差值 [2=>5,3=>6]
  37. // return array_intersect($a,$b); //交集
  38. //return array_search(0,$a);//返回key false
  39. // array_splice($a,0,2,$b); //移除$a中元素 用$b替换
  40. // return $a;
  41. //return array_key_exists(20,$a);
  42. // shuffle($a); //随机打乱数组
  43. // return $a;
  44. // return array_flip($a); //交换数组的键值 返回新数组
  45. // array_reverse(); //倒序
  46. // array_unique();//去重
  47. }
  48. /**
  49. * 截取一个字符串最大长度不重复段,且返回该字符串段及其长度
  50. * 例:'abcadcagc' 输出:'abc' 长度为3
  51. */
  52. public function testMaxLengthStr($str){
  53. $current = '';
  54. $max = 0;
  55. $len=$i=0;
  56. for(;$i<strlen($str);$i++){
  57. if(strpos($current,$str[$i]) !== false){
  58. $current = substr($current, strpos($current, $str[$i])+1);
  59. $len = strlen($current);
  60. }
  61. $current .= $str[$i];
  62. $len++;
  63. $max = max($max, $len);
  64. }
  65. return $max;
  66. }
  67. /**
  68. * 冒泡排序
  69. * @param $arr
  70. * @return mixed
  71. */
  72. public function bubbleSort($arr){
  73. for($i = 0;$i < count($arr); $i++) {
  74. for ($j = 0; $j < count($arr) - $i - 1; $j++) {
  75. if ($arr[$j] > $arr[$j + 1]) {
  76. $temp = $arr[$j + 1];
  77. $arr[$j + 1] = $arr[$j];
  78. $arr[$j] = $temp;
  79. }
  80. }
  81. }
  82. return $arr;
  83. }
  84. /**
  85. * 快速排序
  86. * @param $arr [5,3,4,2,1,6,9,7,8]
  87. * @return array
  88. */
  89. function quickSort($arr){
  90. $count = count($arr);
  91. if($count<=1){
  92. return $arr;
  93. }
  94. $base_num = $arr[0];
  95. $left_arr = array();
  96. $right_arr = array();
  97. for($i=1;$i<$count;$i++){
  98. if($base_num > $arr[$i]){
  99. $left_arr[] = $arr[$i];
  100. }else{
  101. $right_arr[] = $arr[$i];
  102. }
  103. }
  104. $left_arr = $this->quickSort($left_arr);
  105. $right_arr = $this->quickSort($right_arr);
  106. return array_merge($left_arr,array($base_num),$right_arr);
  107. }
  108. /**
  109. * 二分查找
  110. * @param $arr
  111. * @param $x
  112. * @return false|int
  113. */
  114. function binLoop($arr,$x){
  115. $start = 0;
  116. $end = count($arr)-1;
  117. while($start <= $end){
  118. $middle = intval(($start+$end)/2); //[1,2,3,4,5] 5
  119. if($arr[$middle]>$x){
  120. $end = $middle-1;
  121. }else if($arr[$middle]<$x){
  122. $start = $middle+1;
  123. }else{
  124. return $middle;
  125. }
  126. }
  127. return false;
  128. }
  129. /**
  130. * 二分查找算法
  131. * @param array $arr 待查找区间
  132. * @param int $number 查找数
  133. * @return int 返回找到的键
  134. */
  135. function binary_search($arr, $number) {
  136. // 非数组或者数组为空,直接返回-1
  137. if (!is_array($arr) || empty($arr)) {
  138. return -1;
  139. }
  140. // 初始变量值
  141. $len = count($arr);
  142. $lower = 0;
  143. $high = $len - 1;
  144. // 最低点比最高点大就退出
  145. while ($lower <= $high) {
  146. // 以中间点作为参照点比较
  147. $middle = intval(($lower + $high) / 2);
  148. if ($arr[$middle] > $number) {
  149. // 查找数比参照点小,舍去右边
  150. $high = $middle - 1;
  151. } else if ($arr[$middle] < $number) {
  152. // 查找数比参照点大,舍去左边
  153. $lower = $middle + 1;
  154. } else {
  155. // 查找数与参照点相等,则找到返回
  156. return $middle;
  157. }
  158. }
  159. // 未找到,返回-1
  160. return -1;
  161. }
  162. /**
  163. * @param array $arr 待查找区间
  164. * @param int $number 查找数
  165. * @param int $lower 区间最低点
  166. * @param int $high 区间最高点
  167. * @return int
  168. */
  169. function binary_search_recursion(&$arr, $number, $lower, $high) {
  170. // 以区间的中间点作为参照点比较
  171. $middle = intval(($lower + $high) / 2);
  172. // 最低点比最高点大就退出
  173. if ($lower > $high) {
  174. return -1;
  175. }
  176. if ($number > $arr[$middle]) {
  177. // 查找数比参照点大,舍去左边继续查找
  178. return $this->binary_search_recursion($arr, $number, $middle + 1, $high);
  179. } elseif ($number < $arr[$middle]) {
  180. // 查找数比参照点小,舍去右边继续查找
  181. return $this->binary_search_recursion($arr, $number, $lower, $middle - 1);
  182. } else {
  183. return $middle;
  184. }
  185. }
  186. /**
  187. * 含有中文字符 大小写转换
  188. * @param $a
  189. * @return string
  190. */
  191. function mystrtoupper($a){
  192. $b = str_split($a, 1);
  193. $r = '';
  194. foreach($b as $v){
  195. $v = ord($v);
  196. if($v >= 97 && $v<= 122){
  197. $v -= 32;
  198. }
  199. $r .= chr($v);
  200. }
  201. return $r;
  202. }
  203. }