123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 |
- <?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;
- }
- }
|