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));

    ?>

posted on 2014-05-13 17:05  smile小红帽  阅读(493)  评论(0编辑  收藏  举报