zoukankan      html  css  js  c++  java
  • php的数组、排序、查找

    • //创建数组,其值可以放任意的数据类型
           $arr[0]=111;
           $arr[1]=121;
           $arr[2]="nihao";
           $arr[3]=141.9;
           $arr[4]=null;//null要记入长度,并要占用空间,但是不会输出
           echo "数组长度".count($arr);
      //遍历数组中的值
         for($i=0;$i<count($arr);$i++){
               echo "<br/>".$arr[$i];
            }

    •   创建数组的第二种方式                                                                                                                                                                                               

            $arr=array('hello','niho',12.3,1);
            //遍历数组中的值
           for($i=0;$i<count($arr);$i++){
               echo "<br/>".$arr[$i];
              }

    创建数组的第三种方式 【键值的方式】 (在默认情况下,我们的元素下标是从0开始的,但是也可以自己定义)                                                                                               案例如下:                                                                                                                                                                                                                       

                  $arr['logo']="成都";
                  $arr['add']=123;
                        ...
                       或者
                   $arr=array("logo"=>"成都","add"=>123,4=>23);                                                                                                                                                 测试如下:                                                                                                                                                                                                                    

                     $arr=array("logo"=>"成都","add"=>123,4=>23);
                     //遍历数组中的值,foreach这种循环可用于对数组键值对的方式的遍历,也可以用于其他任何方式的数组遍历,foreach可以广泛运用
                    foreach($arr as $val){
                      echo $val;//$val['key']可以得到值对应的键
                    }
                    foreach($arr as $key => $value){
                          echo $key.":".$value;

    •                      }      $a=array();                                                                                                                                                                                                                                                                                                              利用foreach($arr as $key => $value){$a[]=$key//向数组a中按照下表0开始赋值}

                     while循环遍历值    

                   $i=0;
                   while($i<count($arr)){
                 echo "数组值".$arr[$i]."<br/>";//echo "$arr[$i]";这在变量上加了一个双引号也是可以打印出值的,但是单引号就会把其当成字符串来打印
                  $i++;
                       }

                                                                        

                         $arr[true]='hello';

                         alert($arr[1]);//$arr[1]等价于$arr[true];

                         $arr[null]=123;等价于$arr[""]=123;

    • 我们通常使用print_r()和var_dump()来查看数组的情况                                     print_r($arr);//Array ( [0] => hello [1] => niho [2] => 12.3 [3] => 1 )                                                                                                                 var_dump($arr);//array(4) { [0]=> string(5) "hello" [1]=> string(4) "niho" [2]=> float(12.3) [3]=> int(1) }  
    • 在php中数组的长度是可以自动增长的                                                                                                                                                                              案例:

            $arr=array(1,2);
            $arr[2]="zenjia";//自动给该数组分配了一个空间
           echo $arr[2];

    •                                                                                                                         

    • php数组中几个重要的函数                                                                                                                                                                                                1.count();  //统计数组的长度                                                                                                                                                                                2.is_array() //判断一个变量是否是数组                                                                                                                                                                    3.print_r()和var_dump(),上面已经注明过了                                                                                                                                                          4.explode()//拆分字符串,例如$arr=explode(",","a,b,c,d");测试:print_r($arr);          

    • 删除某个数组的键-值对                                                                                                                                                                                                   unset()用于销毁指定变量 ,例如删除一个数组中下标为0的元素,unset($arr[0]);                                                                                                              如果在函数中 unset() 一个全局变量,则只是局部变量被销毁,而在调用环境中的变量将保持调用 unset() 之前一样的值。unset详解请看php手册                                                                                                    

    • 数组的排序                                                                                                                                                                                                                ①冒泡排序                                                                                                                                                                                           

      <?php

      function maoPaoSort(&$arr){//红色的符号表示该变量为引用变量,如果没有&这个符号,传过来的数组就会是将传递的数组复制了一个(是另外一个对象,地址不同了,所以你在外层输出的时候,还是未排序的那个数组,在函数里面输出的数组才是排序好了的
      $temp=0;                                                                                                                                                                                                          $flag=false;
      for($i=0;$i<count($arr)-1;$i++){//count($arr)-1意思是排序好了一个数,就少循环一次

      for($j=0;$j<count($arr)-1-$i;$j++){//-$i为了不把经过一次筛选之后排好的数放入下一次排序中
      //如果前面的数大于后面的数,就要改变两个数的位置
      if($arr[$j]>$arr[$j+1]){
      $temp=$arr[$j];//将大的数先预留在这个变量中
      $arr[$j]=$arr[$j+1];//将小的数放在大的数的位置
      $arr[$j+1]=$temp;//再将预留的大的数放在小的数的位置

      }


      }

      if(!$flag){//说明已经是有序的了,就不用到第二层循环了,提高代码的执行效率
      break;
      }
      $flag=false;


      }
      }

      $myarr=array(5,0,-1,-100,4444);
      maoPaoSort($myarr);
      print_r($myarr);
      ?>

           ②选择排序

      <?php

      function chooseSort(&$arr){
      $temp=0;
      for($i=0;$i<count($arr)-1;$i++){

      //假设当前的值是最小值
      $minValue=$arr[$i];
      //记录我认为最小值的下标
      $minIndex=$i;

      for($j=$i+1;$j<count($arr);$j++){//与第二个数进行比较
      //如果我认为的最小值大于了第二个数,说明我上面的假设不成立
      if($minValue>$arr[$j]){
      $minIndex=$j;
      }
      }
      //然后进行交换
      $temp=$arr[$i];
      $arr[$i]=$arr[$minIndex];
      $arr[$minIndex]=$temp;
      }

      }

      $myarr=array(5,0,-1,-100,4444);
      chooseSort($myarr);
      print_r($myarr);

      ?>

          ③插入排序  

      <?php
      function chaRuSort(&$arr){
      //默认下标为0的数已经是有序的了
      for($i=1;$i<count($arr);$i++){//所以要从下标为1的数开始比较
      //准备要插入的数
      $addValue=$arr[$i];
      //准备要比较的数的下标
      $addIndex=$i-1;
      //如果这些条件满足,说明我们还没有找到数字的正确位置
      while($addIndex>=0&&$addValue<$arr[$addIndex]){

      $arr[$addIndex+1]=$arr[$addIndex];//将大的数往后挪一位

      $addIndex--;//再和前一个数做比较,以此类推放值
      }

      //如果不满足while中的条件就将有序的数插入数组中
      $arr[$addIndex+1]=$addValue;

      }

      }
      $myarr=array(5,0,-1,-100,4444);
      chaRuSort($myarr);
      print_r($myarr);

      ?>

         ④快速排序                                                                                                                                                                                                                

    • 查找                                                                                                                                                                                                                      ❶顺序查找    

      <?php

      function search(&$arr,$findValue){
      $flag=false; //用标志确定是否查找到想要的值
      for($i=0;$i<count($arr);$i++){
      if($arr[$i]==$findValue){
      echo "我要查找数的下标是:".$i."<br/>";
      $flag=true;
      //break;
      }
      }

      if(!$flag){
      echo "找不到你想要查找的数:".$findValue;
      }


      }
      $myarr=array(12,34,34,5940);
      search($myarr,4);

      ?>

       ❷二分查找                                                                                                                                                                                                                    

      <?php
      function binarySearch(&$arr,$findValue,$leftIndex,$rightIndex){
      //中间数的下标
      $centerIndex=($leftIndex+$rightIndex)/2;
      if($leftIndex>$rightIndex){

      echo "找不到$findValue";

      }

      if($findValue>$arr[$centerIndex]){
      binarySearch(&$arr,$findValue,$centerIndex+1,$rightIndex);//递归调用


      }else if($findValue<$arr[$centerIndex]){

      binarySearch(&$arr,$findValue,$leftIndex,$centerIndex-1);

      }else{
      echo "要找的数的下标是$centerIndex";

      }



      }

      $myarr=array(12,34,35,36,59,90);
      binarySearch($myarr,34,0,count($myarr));

      ?>

  • 相关阅读:
    423. Reconstruct Original Digits from English
    400. Nth Digit
    397. Integer Replacement
    396. Rotate Function
    365. Water and Jug Problem
    335. Self Crossing
    319. Bulb Switcher
    线段树-hdu2795 Billboard(贴海报)
    线段树---求逆序数
    线段树——单点替换区间最值
  • 原文地址:https://www.cnblogs.com/tangyue/p/3725957.html
Copyright © 2011-2022 走看看