|
@@ -0,0 +1,216 @@
|
|
|
+<?php
|
|
|
+
|
|
|
+namespace App\Http\Controllers;
|
|
|
+
|
|
|
+use Illuminate\Http\Request;
|
|
|
+
|
|
|
+class TestController extends Controller
|
|
|
+{
|
|
|
+ public function index(){
|
|
|
+// //dd($this->testMaxLengthStr('abcabcbb'));
|
|
|
+// //dd($this->quickSort([2,3,1,3,5,2]));
|
|
|
+// dd($this->binLoop([1,2,3,4,5],2));
|
|
|
+// //dd($this->testArray());
|
|
|
+// dd($this->binary_search([1,2,3,4,5],5));
|
|
|
+// $arr = [1,2,3,4,5];
|
|
|
+// dd($this->binary_search_recursion($arr,2, 0, count($arr)));
|
|
|
+
|
|
|
+ $a = 6;
|
|
|
+ xdebug_debug_zval('a');
|
|
|
+ $b = $a;
|
|
|
+ xdebug_debug_zval('a');
|
|
|
+ unset($b);
|
|
|
+ xdebug_debug_zval('a');
|
|
|
+ }
|
|
|
+
|
|
|
+ public function testArray(){
|
|
|
+ $a = array(1,2,5,6);
|
|
|
+ $b = array(1,2,7);
|
|
|
+// $a=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");
|
|
|
+// $b=array("a"=>"purple","b"=>"orange");
|
|
|
+ //var_dump(array_combine($a,$b)); //将$a中的value作为$b中对应的key,元素个数必须一致。
|
|
|
+ //var_dump(range(2,6)); //[2,3,4,5,6]
|
|
|
+// $firstname = "Peter";
|
|
|
+// $lastname = "Griffin";
|
|
|
+// $age = "41";
|
|
|
+ //return compact("firstname", "lastname", "age"); //变量作为key ["firstname" => "Peter","lastname"=> "Griffin","age"=>"41"]
|
|
|
+ //return array_chunk($b,1); //以最大长度分割数组
|
|
|
+ //return array_merge($a,$b); //合并
|
|
|
+ return array_merge_recursive(); //合并 如果数组中有完全一样的键,将它们递归合并
|
|
|
+ //return array_slice($b,0,1,false);//截取
|
|
|
+ //return array_diff($a,$b); //a相对于b的差值 [2=>5,3=>6]
|
|
|
+ // return array_intersect($a,$b); //交集
|
|
|
+ //return array_search(0,$a);//返回key false
|
|
|
+// array_splice($a,0,2,$b); //移除$a中元素 用$b替换
|
|
|
+// return $a;
|
|
|
+
|
|
|
+ //return array_key_exists(20,$a);
|
|
|
+
|
|
|
+// shuffle($a); //随机打乱数组
|
|
|
+// return $a;
|
|
|
+
|
|
|
+// return array_flip($a); //交换数组的键值 返回新数组
|
|
|
+// array_reverse(); //倒序
|
|
|
+// array_unique();//去重
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 截取一个字符串最大长度不重复段,且返回该字符串段及其长度
|
|
|
+ * 例:'abcadcagc' 输出:'abc' 长度为3
|
|
|
+ */
|
|
|
+ public function testMaxLengthStr($str){
|
|
|
+ $current = '';
|
|
|
+ $max = 0;
|
|
|
+ $len=$i=0;
|
|
|
+ for(;$i<strlen($str);$i++){
|
|
|
+ if(strpos($current,$str[$i]) !== false){
|
|
|
+ $current = substr($current, strpos($current, $str[$i])+1);
|
|
|
+ $len = strlen($current);
|
|
|
+ }
|
|
|
+ $current .= $str[$i];
|
|
|
+ $len++;
|
|
|
+ $max = max($max, $len);
|
|
|
+ }
|
|
|
+ return $max;
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 冒泡排序
|
|
|
+ * @param $arr
|
|
|
+ * @return mixed
|
|
|
+ */
|
|
|
+ public function bubbleSort($arr){
|
|
|
+ for($i = 0;$i < count($arr); $i++) {
|
|
|
+ for ($j = 0; $j < count($arr) - $i - 1; $j++) {
|
|
|
+ if ($arr[$j] > $arr[$j + 1]) {
|
|
|
+ $temp = $arr[$j + 1];
|
|
|
+ $arr[$j + 1] = $arr[$j];
|
|
|
+ $arr[$j] = $temp;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return $arr;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 快速排序
|
|
|
+ * @param $arr [5,3,4,2,1,6,9,7,8]
|
|
|
+ * @return array
|
|
|
+ */
|
|
|
+ function quickSort($arr){
|
|
|
+ $count = count($arr);
|
|
|
+ if($count<=1){
|
|
|
+ return $arr;
|
|
|
+ }
|
|
|
+ $base_num = $arr[0];
|
|
|
+ $left_arr = array();
|
|
|
+ $right_arr = array();
|
|
|
+ for($i=1;$i<$count;$i++){
|
|
|
+ if($base_num > $arr[$i]){
|
|
|
+ $left_arr[] = $arr[$i];
|
|
|
+ }else{
|
|
|
+ $right_arr[] = $arr[$i];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $left_arr = $this->quickSort($left_arr);
|
|
|
+ $right_arr = $this->quickSort($right_arr);
|
|
|
+ return array_merge($left_arr,array($base_num),$right_arr);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 二分查找
|
|
|
+ * @param $arr
|
|
|
+ * @param $x
|
|
|
+ * @return false|int
|
|
|
+ */
|
|
|
+ function binLoop($arr,$x){
|
|
|
+ $start = 0;
|
|
|
+ $end = count($arr)-1;
|
|
|
+ while($start <= $end){
|
|
|
+ $middle = intval(($start+$end)/2); //[1,2,3,4,5] 5
|
|
|
+ if($arr[$middle]>$x){
|
|
|
+ $end = $middle-1;
|
|
|
+ }else if($arr[$middle]<$x){
|
|
|
+ $start = $middle+1;
|
|
|
+ }else{
|
|
|
+ return $middle;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 二分查找算法
|
|
|
+ * @param array $arr 待查找区间
|
|
|
+ * @param int $number 查找数
|
|
|
+ * @return int 返回找到的键
|
|
|
+ */
|
|
|
+ function binary_search($arr, $number) {
|
|
|
+ // 非数组或者数组为空,直接返回-1
|
|
|
+ if (!is_array($arr) || empty($arr)) {
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+ // 初始变量值
|
|
|
+ $len = count($arr);
|
|
|
+ $lower = 0;
|
|
|
+ $high = $len - 1;
|
|
|
+ // 最低点比最高点大就退出
|
|
|
+ while ($lower <= $high) {
|
|
|
+ // 以中间点作为参照点比较
|
|
|
+ $middle = intval(($lower + $high) / 2);
|
|
|
+ if ($arr[$middle] > $number) {
|
|
|
+ // 查找数比参照点小,舍去右边
|
|
|
+ $high = $middle - 1;
|
|
|
+ } else if ($arr[$middle] < $number) {
|
|
|
+ // 查找数比参照点大,舍去左边
|
|
|
+ $lower = $middle + 1;
|
|
|
+ } else {
|
|
|
+ // 查找数与参照点相等,则找到返回
|
|
|
+ return $middle;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 未找到,返回-1
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * @param array $arr 待查找区间
|
|
|
+ * @param int $number 查找数
|
|
|
+ * @param int $lower 区间最低点
|
|
|
+ * @param int $high 区间最高点
|
|
|
+ * @return int
|
|
|
+ */
|
|
|
+ function binary_search_recursion(&$arr, $number, $lower, $high) {
|
|
|
+ // 以区间的中间点作为参照点比较
|
|
|
+ $middle = intval(($lower + $high) / 2);
|
|
|
+ // 最低点比最高点大就退出
|
|
|
+ if ($lower > $high) {
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+ if ($number > $arr[$middle]) {
|
|
|
+ // 查找数比参照点大,舍去左边继续查找
|
|
|
+ return $this->binary_search_recursion($arr, $number, $middle + 1, $high);
|
|
|
+ } elseif ($number < $arr[$middle]) {
|
|
|
+ // 查找数比参照点小,舍去右边继续查找
|
|
|
+ return $this->binary_search_recursion($arr, $number, $lower, $middle - 1);
|
|
|
+ } else {
|
|
|
+ return $middle;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 含有中文字符 大小写转换
|
|
|
+ * @param $a
|
|
|
+ * @return string
|
|
|
+ */
|
|
|
+ function mystrtoupper($a){
|
|
|
+ $b = str_split($a, 1);
|
|
|
+ $r = '';
|
|
|
+ foreach($b as $v){
|
|
|
+ $v = ord($v);
|
|
|
+ if($v >= 97 && $v<= 122){
|
|
|
+ $v -= 32;
|
|
|
+ }
|
|
|
+ $r .= chr($v);
|
|
|
+ }
|
|
|
+ return $r;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|