数组的相关处理函数

1、数组的键、值操作函数

2、统计数组元素的个数与唯一性

3、使用回调函数处理数组的函数

4、数组的排序函数

5、拆分、合并、分解与结合数组

6、数组与数据结构

7、其他有用的数组处理函数

1、数组的键、值操作函数

array_values();

用途:返回数组中所有的值

格式:array array_values ( array input )

array_keys();

用途:返回数组中所有的键名

格式:array array_keys(array input[,mixed search_value [,bool strict]])   其中search_value为空则只返回该值的键名

in_array();

用途:检查数组中是否存在某个值

格式:bool in_array(mixed needle, array haystack [,bool strict]) 其中strict参数:是否匹配类型

array_flip();

用途:交换数组中的键和值

格式:array array_flip(array trans)

array_reverse()

用途:返回一个单元顺序相反的数组

格式:array array_reverse ( array array [, bool preserve_keys] )    如果 preserve_keys 为 TRUE 则保留原来的键名

案例:

$arr = [‘rose‘,‘lily‘,‘xiaoxue‘,‘jack‘,‘xiaoming‘,‘jack‘];

/获取一个数组所有的键,以索引数组形式返回
$result =array_keys($arr);
print_r($result);

//获取一个数组所有的值,以索引数组形式返回
$result = array_values($arr);
print_r($result);

// in_array() 可以用于判断上传文件格式是否符合要求。$arr = [‘jpg‘,‘png‘,‘gif‘];
// $result = in_array(‘jacky‘,$arr);
// var_dump($result);

if(in_array(‘jackok‘,$arr)){
    echo ‘jack存在于$arr数组中‘;
}else{
    echo ‘jack不存在于$arr数组中‘;
}

// 翻转键值
$brr = array_flip($arr);
print_r($brr);

// 翻转数组顺序
$arr = [‘rose‘,‘lily‘,‘xiaoxue‘,‘jack‘,‘xiaoming‘,‘ajack‘];
print_r(array_reverse($arr,true));

2、统计数组元素的个数与唯一性

count();

用途:计算数组中的单元数目或对象中的属性个数

案例:



$arr = [‘rose‘,‘lily‘,‘xiaoxue‘,‘jack‘,‘xiaoming‘,‘ajack‘];
//返回数组单元个数或者对象成员属性个数
echo count($arr);

array_count_values();

用途:统计数组中所有的值出现的次数

array_unique();

用途:移除数组中重复的值

案例:

<?php
$arr = [‘a‘,‘b‘,‘a‘,‘c‘,‘d‘,‘c‘,‘a‘,‘b‘];

//统计数组单元值出现的次数
$brr = array_count_values($arr);

//移除数组中重复的值 
$crr = array_unique($arr);
print_r($crr);

结果:

Array
(
    [a] => 3
    [b] => 2
    [c] => 2
    [d] => 1
)
Array
(
    [0] => a
    [1] => b
    [3] => c
    [5] => d
)

3、使用回调函数处理数组的函数

array_filter();

用途:用回调函数过滤数组中的单元

格式:array array_filter(array input [,callback callback])

解释:依次将input数组中的每个值传递到callback函数。

    • 如果callback函数返回TRUE,则input数组的当前值会被包含在返回的结果数组中。数组的键名保留不变。
    • 如果没有提供callback函数,array_filter()将删除input中所有等值为FALSE的条目。

案例1:非空!empty

<?php
include ‘db.php‘;
$sql = "select * from bbs_content limit 1";
$data = select($sql)[0];
echo ‘<pre>‘;

//用回调函数过滤数组中的单元
$result = array_filter($data,‘myfunc‘);

function myfunc($x)
{
    return !empty($x);
}

print_r($result);

结果:

Array
(
    [id] => 1
    [pid] => 4
    [uid] => 1
    [title] => 阿斯顿发送到
    [content] =>发

[edittime] => 1398212373
    [posttime] => 1398212373
    [visittimes] => 1
    [cost] => 10
    [ip] => 2130706433
    [isopen] => 1
)

案例2(上边结果的反例):空empty

//用回调函数过滤数组中的单元
$result = array_filter($data,‘myfunc‘);

function myfunc($x)
{
    return empty($x);
}

print_r($result);

结果:

Array
(
    [pic] =>
    [keywords] =>
    [description] =>
    [ishot] => 0
    [isjinghua] => 0
    [istop] => 0
    [allowlevel] => 0
    [needreply] => 0
    [inbox] => 0
)

案例3:

$arr = [0,1,2,3,true,false,null];

$result = array_filter($arr,‘fun‘);

function fun($a)
{
    if($a){
        return true;
    }else{
        return false;
    }
}

print_r($result);

案例三的简化:

$result = array_filter($arr,function($x){ return $x;});
print_r($result);

结果都为:

Array
(
    [1] => 1
    [2] => 2
    [3] => 3
    [4] => 1
)

array_walk();

用途:对数组中的每个成员应用用户函数

格式:bool array_walk(array &array, callback funcname[,mixed userdata])

解释:如果成功则返回 TRUE,失败则返回 FALSE。

将用户自定义函数 funcname 应用到 array 数组中的每个单元。典型情况下 funcname 接受两个参数。array 参数的值作为第一个,键名作为第二个。如果提供了可选参数 userdata,将被作为第三个参数传递给 callback funcname。

array_walk() 不会受到 array 内部数组指针的影响。array_walk() 会遍历整个数组而不管指针的位置。

案例:

<?php
$arr = [‘apple‘,‘li‘,‘banana‘,‘xigua‘,‘taozi‘];
echo ‘<pre>‘;

//对数组中的每个成员应用用户函数
array_walk($arr,"myfun");

function myfun(&$v,$k)
{
    $v .= ‘lai 2 jin‘;
}

print_r($arr);

array_walk($arr,‘fun‘,‘abc‘);

function fun(&$v,$k,$u)
{
    $v.=$u;
}

print_r($arr);

结果:

Array
(
    [0] => applelai 2 jin
    [1] => lilai 2 jin
    [2] => bananalai 2 jin
    [3] => xigualai 2 jin
    [4] => taozilai 2 jin
)
Array
(
    [0] => applelai 2 jinabc
    [1] => lilai 2 jinabc
    [2] => bananalai 2 jinabc
    [3] => xigualai 2 jinabc
    [4] => taozilai 2 jinabc
)

疑问:array 参数的值作为第一个,键名作为第二个。为什么输出键名为索引下标?

后来自己给的答案:更改的是数组单元的值,又没有更改键名,还是按正常原则输出的呀,只是在原有的基础上,增加了相应的值罢了。

array_map();

用途:将回调函数作用到给定数组的单元上

格式:array array_map ( callback callback, array arr1 [, array ...] )

解释:array_map() 返回一个数组,该数组包含了 arr1 中的所有单元经过 callback 作用过之后的单元。callback 接受的参数数目应该和传递给 array_map() 函数的数组数目一致。

案例:

<?php
$arr = [10,100,20,60,50,60];
$brr = [11,21,31,41,51,61,71];

//将回调函数作用到给定数组的单元上 
$result = array_map(‘myfun‘,$arr);

function myfun($x)
{
    return $x += 10;
}

echo ‘<pre>‘;
print_r($result);


$result  = array_map(‘fun‘,$arr,$brr);
function fun($x,$y)
{
    return $x + $y;
}
print_r($result);

结果:

Array
(
    [0] => 20
    [1] => 110
    [2] => 30
    [3] => 70
    [4] => 60
    [5] => 70
)
Array
(
    [0] => 21
    [1] => 121
    [2] => 51
    [3] => 101
    [4] => 101
    [5] => 121
    [6] => 71
)

4、数组的排序函数

sort -- 对数组排序(升序)

rsort -- 对数组逆向排序(降序)

usort --  使用用户自定义的比较函数对数组中的值进行排序

案例:

<?php
$arr = [10,100,20,60,50,60];
echo ‘<pre>‘;
/*
//对数组排序(升序)
sort($arr);
//对数组排序(降序)
rsort($arr);

print_r($arr);
*/

usort($arr,‘myfun‘);

function myfun($a,$b)
{
   retrun $a-$b;
}
print_r($arr);

结果:

Array
(
    [0] => 10
    [1] => 20
    [2] => 50
    [3] => 60
    [4] => 60
    [5] => 100
)

根据元素的值对数组排序(保留原有键名和值的关系)

asort -- 对数组进行排序并保持索引关系(关联数组排序)

arsort --  对数组进行逆向排序并保持索引关系

uasort --  用户自定义的比较函数对数组进行排序并保持索引关系

案例:

<?php
header("content-type:text/html;charset=utf-8");
$users = [‘user1‘ => ‘xiongda‘,‘user2‘ => ‘xiaohei‘,‘user3‘=>‘xibobai‘];
echo ‘<pre>‘;
//对数组进行升序排序并保持索引关系
// asort($users);

//对数组进行降序排序并保持索引关系
// arsort($users);

//使用用户自定义函数,对数组进行排序并保持索引关系
uasort($users,‘myfun‘);

function myfun($a,$b)
{
    if($a > $b){
        return 1;
    }
    if($a < $b){
        return -1;
    }
    if($a == $b){
        return 0;
    }
}
print_r($users);

结果:按值排序:abo,索引关系不变

Array
(
    [user2] => xiaohei
    [user3] => xibobai
    [user1] => xiongda
)

根据键名对数组排序(保留原来的键)

ksort -- 对数组按照键名排序

krsort -- 对数组按照键名逆向排序

uksort --  使用用户自定义的比较函数对数组中的键名进行排序

案例:

<?php
header("content-type:text/html;charset=utf-8");
$users = [‘user6‘ => ‘xiongda‘,‘user2‘ => ‘xiaohei‘,‘user1‘=>‘xibobai‘];

// 对数组按照键名升序排序
ksort($users);

// 对数组按照键名降序排序
krsort($users);

//使用用户自定义的比较函数对数组中的键名进行排序 
uksort($users,‘myfun‘);

function myfun($a,$b)
{
    if($a > $b){
        return 1;
    }
    if($a < $b){
        return -1;
    }
    if($a == $b){
        return 0;
    }
}
echo ‘<pre>‘;

print_r($users);

结果:

Array

(
    [user1] => xibobai
    [user2] => xiaohei
    [user6] => xiongda
)

natsort --  用“自然排序”算法对数组排序

natcasesort --  用“自然排序”算法对数组不区分大小写字母排序

array_multisort -- 对多个数组或多维数组进行排序

案例:

<?php
$arr = [‘image123‘,‘Image102‘,‘image120‘,‘Image1202‘,‘image1231‘];

echo ‘<pre>‘;
sort($arr);

print_r($arr);
echo ‘<hr>‘;
// 自然排序
natsort($arr);
print_r($arr);
echo ‘<hr>‘;

// 不区分大小写自然排序
natcasesort($arr);
print_r($arr);

结果:

Array
(
    [0] => Image102
    [1] => Image1202
    [2] => image120
    [3] => image123
    [4] => image1231
)按照ASCII码排序


Array
(
    [0] => Image102
    [1] => Image1202
    [2] => image120
    [3] => image123
    [4] => image1231
)按照ASCII码排序


Array
(
    [0] => Image102
    [2] => image120
    [3] => image123
    [1] => Image1202
    [4] => image1231
)不区分大小写自然排序

sort 和natsort的比较:sort按位排序

<?php

//image全是小写i
$arr = [‘image123‘,‘image102‘,‘image120‘,‘image1202‘,‘image1231‘];

echo ‘<pre>‘;
sort($arr);

print_r($arr);
echo ‘<hr>‘;
// 自然排序
natsort($arr);
print_r($arr);

结果:

Array
(
    [0] => image102
    [1] => image120
    [2] => image1202
    [3] => image123
    [4] => image1231
)
Array
(
    [0] => image102
    [1] => image120
    [3] => image123
    [2] => image1202
    [4] => image1231
)

array_multisort -- 对多个数组或多维数组进行排序

<?php
include ‘db.php‘;
$sql = ‘select regtime,username,money,email from bbs_user limit 3‘;
$data = select($sql);

echo ‘<pre>‘;
// print_r($data);

foreach($data as $v){
    $email[] = $v[‘email‘];
    $username[] = $v[‘username‘];
    $regtime[]=$v[‘regtime‘];
}

// print_r($email);
// print_r($username);

//多维数组排序
array_multisort($username,SORT_DESC,$regtime,SORT_ASC,$email,SORT_ASC,$data);
print_r($data);

结果:

Array
(
    [0] => Array
        (
            [regtime] => 1397632974
            [username] => jackyok
            [money] => 100
            [email] => [email protected]
        )
 
    [1] => Array
        (
            [regtime] => 1397632773
            [username] => jack
            [money] => 100
            [email] => 50377203@qq.com
        )
 
    [2] => Array
        (
            [regtime] => 1397633371
            [username] => alibaba
            [money] => 100
            [email] => 50377203@qq.com
        )
 
)

5、拆分、合并、分解与结合数组

array_slice -- 从数组中取出一段

<?php
$arr = [‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘];
// $result = array_slice($arr,3);
$result = array_slice($arr,-4,-1);

var_dump($result);

结果:

array(3) { [0]=> string(1) "c" [1]=> string(1) "d" [2]=> string(1) "e" }

array_splice --  把数组中的一部分去掉并用其它值取代

<?php
$arr = [‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘];

// $brr = array_splice($arr,1,1,‘x‘);
// $brr = array_splice($arr,1);
// $brr = array_splice($arr,-1);

// $brr = array_splice($arr,1,1);
// $brr = array_splice($arr,1,-1);

// $brr = array_splice($arr,-3,1);
// $brr = array_splice($arr,-3,-1,[‘x‘,‘y‘]);
$brr = array_splice($arr,-3,-1,array(array(‘a‘,‘b‘)));
echo ‘<pre>‘;
print_r($arr);

echo ‘<hr>‘;
print_r($brr);

结果:

Array

(

[0] => a

[1] => b

[2] => c

[3] => Array

(

[0] => a

[1] => b

)

[4] => f

)



Array

(

[0] => d

[1] => e

)

array_combine --  创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值

<?php
$arr = [‘a‘,‘b‘,‘c‘,‘d‘];
$brr = [‘huanggua‘,‘mangguo‘,‘taozi‘,‘boluo‘];

// 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值
$crr = array_combine($arr,$brr);
echo ‘<pre>‘;
print_r($crr);

结果:

Array

(

[a] => huanggua

[b] => mangguo

[c] => taozi

[d] => boluo

)

array_merge -- 合并一个或多个数组

<?php
$arr = array(‘xiaorui‘,10=>‘enzhu‘,‘jingjing‘,‘user1‘=>‘minghui‘,‘caojie‘);
$brr = array(‘zhangtao‘,‘hongli‘,10=>‘fengtao‘,‘henian‘,‘user1‘=>‘haijing‘);

//合并一个或多个数组,键名同名的后面的会把前边的覆盖掉
$crr = array_merge($arr,$brr);

echo ‘<pre>‘;
print_r($crr);

结果:

Array

(

[0] => xiaorui

[1] => enzhu

[2] => jingjing

[user1] => haijing

[3] => caojie

[4] => zhangtao

[5] => hongli

[6] => fengtao

[7] => henian

)

array_intersect -- 计算数组的交集

array_diff -- 计算数组的差集

<?php
$arr = array(‘xiaorui‘,‘enzhu‘,‘jingjing‘,‘haijing‘,‘caojie‘);
$brr = array(‘zhangtao‘,‘enzhu‘,‘fengtao‘,‘henian‘,‘haijing‘);

//获取多个数组交集
// $crr = array_intersect($arr,$brr);

//获取多个数组差集
$crr = array_diff($arr,$brr);
echo ‘<pre>‘;
print_r($crr);

6、数组与数据结构

<?php
$brr = array(‘zhangtao‘,‘enzhu‘,‘fengtao‘,‘henian‘,‘haijing‘);

//将数组最后一个单元弹出
// $result = array_pop($brr);

//将一个或多个单元压入数组的末尾(入栈) 
// $result = array_push($brr,‘shenchao‘);

//将数组开头的单元移出数组 
// $result = array_shift($brr);

//在数组开头插入一个或多个单元 
// $result = array_unshift($brr,array(‘cenghao‘,‘gaolaoshi‘));

echo ‘<pre>‘;
print_r($brr);
print_r($result);

array_rand --  从数组中随机取出一个或多个单元

<?php
$arr = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20];

// 从数组中随机取出一个或多个单元 
$keys = array_rand($arr,3);
print_r($keys);

foreach($keys as $v){
    echo $arr[$v].‘<br>‘;
}

shuffle -- 将数组打乱

<?php
$arr = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20];

//shuffle — 将数组打乱
shuffle($arr);
print_r($arr);
echo $arr[0].‘<br>‘;
echo $arr[1].‘<br>‘;
echo $arr[2];

//建立一个包含指定范围单元的数组   
//第一个参数开始位置(最小值) 第二个参数结束位(最大值) 第三个参数步长
$brr = range(1,54,3);
echo ‘<pre>‘;
print_r($brr);

来自为知笔记(Wiz)

时间: 2024-10-11 00:15:29

数组的相关处理函数的相关文章

php数组的数学功能相关常用函数

php数组中有一些函数与数学相关的函数,大多都是以array开头然后下划线接一个数学上的英文单词,如下: 1 array_diff() 2 array_diff_assoc() 3 array_intersect() 4 array_intersect_assoc() 5 array_sum() 6 array_product() 7 array_count_values() 首先是数组集合函数,差集array_diff,用于得到目标数组和其他数组的都不同的那些元素 1 $arr = [1, 2

PHP基础-常用的数组相关处理函数

一 数组键/值操作有关的函数 1. array_values()//获取数组中所有的值 $lamp=array("os"=>"linux", "webserver"=>"Apache", "db"=>"MySqL", "laguage"=>"php"); $arr=array_values($lamp); list($os,

PHP 数组详解之函数【一】

1.         判断查找in_array()函数判断数组是否包含某元素:array_search()在数组中搜索特定值并返回索引号/键名,如果不存在则返回false. 2.         数组排序sort()/rsort()保持键的位置,依值排序:asort()/arsort()依值排序,保持键值对应:ksort()/krsort()依键排序,保持键值对应:natsort()/natcasesort()按自然顺序重排,保持键值对应:shuffle()随机排序.array_reverse(

Java Thread 相关的函数

构造方法摘要 Thread()          分配新的 Thread 对象. Thread(Runnable target)          分配新的 Thread 对象. Thread(Runnable target, String name)          分配新的 Thread 对象. Thread(String name)          分配新的 Thread 对象. Thread(ThreadGroup group, Runnable target)          分

PHP数组各种操作与函数汇总

对于Web编程来说,最重要的就是存取和读写数据了.存储方式可能有很多种,可以是字符串.数组.文件的形式等.数组,可以说是PHP的数据应用中较重要的一种方式.PHP的数组函数众多,下面是我学习的小结,借此记之,便于以后鉴之. 1. 数组定义 数组的定义使用 array()方式定义,可以定义空数组: <?php $number = array(1,3,5,7,9); //定义空数组 $result = array(); $color =array("red","blue&q

php对二维数组进行相关操作(排序、转换、去空白等)

php对二维数组进行相关操作(排序.转换.去空白等) 投稿:lijiao 字体:[增加 减小] 类型:转载 时间:2015-11-04 这篇文章主要介绍了php对二维数组进行相关操作,包括php对二维数组排序.转换.去空白,以及去重复值等,感兴趣的小伙伴们可以参考一下 技巧提示: ? 1 2 3 4 5 6 7 8 9 array_keys($array) //返回所有键名   array_values($array) //返回所有键值    $result=array_reverse($inp

Scala中Zip相关的函数

在Scala中存在好几个Zip相关的函数,比如zip,zipAll,zipped 以及zipWithIndex等等.我们在代码中也经常看到这样的函数,这篇文章主要介绍一下这些函数的区别以及使用. 1.zip函数将传进来的两个参数中相应位置上的元素组成一个pair数组.如果其中一个参数元素比较长,那么多余的参数会被删掉.看下英文介绍吧: Returns a list formed from this list and another iterable collection by combining

字符串数组初始化相关问题总结

C字符串数组初始化相关问题总结 在C语言编程中,当我们声明一个字符串数组的时候,常常需要把它初始化为空串.总结起来有以下三种方式: (1) char str[10]=""; (2) char str[10]={'\0'}; (3) char str[10]; str[0]='\0'; 第(1)(2)种方式是将str数组的所有元素都初始化为'\0',而第(3)种方式是只将str数组的第一个元素初始化为'\0'.如果数组的size非常大,那么前两种方式将会造成很大的开销. 所以,除非必要(

PHP中文件类型 文件属性 路径以及 文件相关的函数

一: 文件类型判断: 1.is_dir()  判断是不是目录 2.is_file() 判断是不是文件 3.is_executeable() 判断是不是可执行文件 4.is_readable()  判断是不是可读文件 5.is_writable() 判断是不是可写文件 6.is_link()  判断是不是快捷方式 二:文件属性: 1.file_exits()  文件是否存在 2.filesize() 文件大小 3.filectime()  文件创建时间 4.filemtime() 文件修改的时间