php数组

模拟数据结构

数组后添加
array_push
$a=array("red","green");
array_push($a,"blue","yellow");
Array ( [0] => red [1] => green [2] => blue [3] => yellow ) 

数组前添加
array_unshift
$a=array("a"=>"red","b"=>"green");
array_unshift($a,"blue");
Array ( [0] => blue [a] => red [b] => green ) 

数组前删除
$a=array("a"=>"red","b"=>"green","c"=>"blue");
echo array_shift($a);
redArray ( [b] => green [c] => blue ) 

数组后删除
$a=array("red","green","blue");
array_pop($a);
Array ( [0] => red [1] => green ) 

php基础篇-二维数组排序 array_multisort 

对2维数组或者多维数组排序是常见的问题,在php中我们有个专门的多维数组排序函数,下面简单介绍下:
array_multisort(array1,sorting order, sorting type,array2,array3..)是对多个数组或多维数组进行排序的函数。
array1 必需。规定输入的数组。
sorting order 可选。规定排列顺序。可能的值是 SORT_ASC 和 SORT_DESC。
sorting type 可选。规定排序类型。可能的值是SORT_REGULAR、SORT_NUMERIC和SORT_STRING。
array2 可选。规定输入的数组。
array3 可选。规定输入的数组。
参数中的数组被当成一个表的列并以行来进行排序 - 这类似 SQL 的 ORDER BY 子句的功能。第一个数组是要排序的主要数组。数组中的行(值)比较为相同的话,

就会按照下一个输入数组中相应值的大小进行排序,依此类推。
第一个参数是数组,随后的每一个参数可能是数组,也可能是下面的排序顺序标志(排序标志用于更改默认的排列顺序)之一:
    SORT_ASC - 默认,按升序排列。(A-Z)
    SORT_DESC - 按降序排列。(Z-A)
随后可以指定排序的类型:
    SORT_REGULAR - 默认。将每一项按常规顺序排列。
    SORT_NUMERIC - 将每一项按数字顺序排列。
    SORT_STRING - 将每一项按字母顺序排列

    <?php  
        function my_sort($arrays,$sort_key,$sort_order=SORT_ASC,$sort_type=SORT_NUMERIC ){   
            if(is_array($arrays)){   
                foreach ($arrays as $array){   
                    if(is_array($array)){   
                        $key_arrays[] = $array[$sort_key];   
                    }else{   
                        return false;   
                    }   
                }   
            }else{   
                return false;   
            }  
            array_multisort($key_arrays,$sort_order,$sort_type,$arrays);   
            return $arrays;   
        }  
        $person =  array(  
                        array('id'=>1,'name'=>'fj','weight'=>100,'height'=>180),  
                        array('id'=>2,'name'=>'tom','weight'=>53,'height'=>150),  
                        array('id'=>3,'name'=>'jerry','weight'=>120,'height'=>156),  
                        array('id'=>4,'name'=>'bill','weight'=>110,'height'=>190),  
                        array('id'=>5,'name'=>'linken','weight'=>80,'height'=>200),  
                        array('id'=>6,'name'=>'madana','weight'=>95,'height'=>110),  
                        array('id'=>7,'name'=>'jordan','weight'=>70,'height'=>170)  
                    );  
        var_dump($person);  
        $person = my_sort($person,'name',SORT_ASC,SORT_STRING);  
        var_dump($person);   
        $person = my_sort($person,'weight');  
        var_dump($person);  
    ?>  

例如像下面的数组:
代码如下:

$users = array(
  array('name' => 'tom', 'age' => 20)
  , array('name' => 'anny', 'age' => 18)
  , array('name' => 'jack', 'age' => 22)
);

希望能按照age从小到大进行排序。笔者整理了两个方法出来,分享给大家。
1、使用array_multisort
使用这个方法,会比较麻烦些,要将age提取出来存储到一维数组里,然后按照age升序排列。具体代码如下:
代码如下:

$ages = array();
foreach ($users as $user) {
  $ages[] = $user['age'];
}
array_multisort($ages, SORT_ASC, $users);
执行后,$users就是排序好的数组了,可以打印出来看看。如果需要先按年龄升序排列,再按照名称升序排列,方法同上,就是多提取一个名称数组出来,最后的排

序方法这样调用:
代码如下:

array_multisort($ages, SORT_ASC, $names, SORT_ASC, $users);

这里的重点就是,先把要排序的key存到一个一维数组中,然后就可以使用array_multisort()这个函数,将数组按照key进行排序了,当然,这里的排序你完全可以

不适用array_multisort()这个函数,
仅仅通过foreach遍历也能达到这个效果,但是既然php开发者给我们提供了更好的办法,我们就可以省去不必要的麻烦了。

PHP二维数组去重复项函数
PHP数组去除重复项 有个内置函数array_unique (),但是php的 array_unique函数只适用于一维数组,对多维数组并不适用,以下提供一个二维数组 的 

array_unique函数
    function unique_arr($array2D,$stkeep=false,$ndformat=true)  
    {  
        // 判断是否保留一级数组键 (一级数组键可以为非数字)  
        if($stkeep) $stArr = array_keys($array2D);  
      
        // 判断是否保留二级数组键 (所有二级数组键必须相同)  
        if($ndformat) $ndArr = array_keys(end($array2D));  
      
        //降维,也可以用implode,将一维数组转换为用逗号连接的字符串  
        foreach ($array2D as $v){  
            $v = join(",",$v);   
            $temp[] = $v;  
        }  
      
        //去掉重复的字符串,也就是重复的一维数组  
        $temp = array_unique($temp);   
      
        //再将拆开的数组重新组装  
        foreach ($temp as $k => $v)  
        {  
            if($stkeep) $k = $stArr[$k];  
            if($ndformat)  
            {  
                $tempArr = explode(",",$v);   
                foreach($tempArr as $ndkey => $ndval) $output[$k][$ndArr[$ndkey]] = $ndval;  
            }  
            else $output[$k] = explode(",",$v);   
        }  
      
        return $output;  
    }  

$array2D=array('first'=>array('title'=>'1111','date'=>'2222'),'second'=>array('title'=>'1111','date'=>'2222'),'third'=>array

('title'=>'2222','date'=>'3333'));  
    print_r($array2D);  
    print_r(unique_arr($array2D,true));  









猜你喜欢

转载自blog.csdn.net/u012322399/article/details/80051134
今日推荐