PHP之数组排序函数精讲

目录

 

1.数字索引数组

2.循环访问数组

3.PHP数组操作符

4.多维数组

5.数组排序

1.一维数组排序

1.sort:(对值进行排序)

2.asort()(对键进行排序)

3.ksort()对键进行排序

2.多维数组排序

1.array_multisort()

2.用户自定义排序

3.shuffle()随机排序,可以用来生成动态页面

3.数组指针

4.其他

1.将数组转换为字符串(implode)

2.将字符串转换为数组(explode)

3.array_push和array_pop()

4.


 

1.数字索引数组

<?php
//初始化数组
$arr1 = array(1,2,3);
$arr2 = [1,2,3,4];
$arr2[1] = "asd";//改变数组的值
$arr3 = $arr1; //赋值
//创建特殊数组
$arr4 = range(1,5,2);//$arr4 = range('a','z');

2.循环访问数组

<?php
$arr  = range(1,10);
foreach($arr as $i)
{
    echo $i . PHP_EOL;
}
$arr1  = array("a"=>2,"s"=>3);
$arr1["as"] = 4;
foreach ($arr1 as $key=>$value)
{
    echo $key . " ". $value . PHP_EOL;
}

3.PHP数组操作符

操作符名称示例結 果
+联合$a + $b$3和$1^的联合。数组$b将被附加到$a中,但是任何关键字 冲突的元素将不会被添加
*=*等价$a = $b如果$3和$1)包含相同元素,返回true
*==*恒等$a == $b如果$3和$。包含相同顺序和类型的元素,返回true
*!=*不等价$a != $b如果$3和$1?不包含相同元素,返回true
*O*不等价$a o $b与!=相同
*!=*不恒等$a != Sb如果$3和$1)不包含相同顺序类型的元素,返回true

 

4.多维数组

<?php
//二维数组
$arr = array(
    array(1,2,3),
     array(1,2,3),
    array(1,2,3)
);
for($i = 0;$i<count($arr[0]);$i++)//count($arr[0])计算行数
{
    for($j = 0;$j<count($arr[0]);$j++)
    {
        echo $arr[$i][$j] . PHP_EOL;
    }
}
$arr1 = array(
    array("asd"=>1,"asdf"=>2,"asdfg"=>3),
    array("asd"=>1,"asdf"=>2,"asdfg"=>3),
    array("asd"=>1,"asdf"=>2,"asdfg"=>3)
);
echo $arr1[0]["asd"];
//三维数组类似

5.数组排序

1.一维数组排序

1.sort:(对值进行排序)

1.sort()函数是区分字母大小写的。所有的大写字母都在小写字母的前面。所以 'A'小于’Z',而'Z'小于’a'。

2.该函数的第二个参数是可选的。这个可选参数值包括SORT_REGULAR (默认值)、 SORT_NUMERIC、SORT_STRING、SORT_LOCALE_STRING、SORT_NATURAL、 SORT_FLAG_CASEo

3.参数值SORT_LOCALE_STRING表示根据当前系统locale按字符串形式对数组进行排序,不同locale的排序结果不同。

4.参数值SORT_NATURAL将产生一个自然排序顺序,使用natsort()函数也可以获得相 同排序效果。自然排序顺序类似于组合字符串和数字排序,排序结果更符合人的直观感觉。 例如,对字符串'filel' 'filelO' ' file2'进行字符串排序,其结果是’filel* 4 file2*和 'filelO',这样的结果更符合人类直观感觉。

参数值 SORT_FLAG_CASE 是 SORT_STRING 或 SORT_NATURAL 的组合,可以使用 位操作符&来组合选项,如下代码所示:

sort($products, SORT_STRING & SORT_FLAG_CASE);

以上代码将忽略大小写进行排序,因此’a'和’A'是等价的。

<?php
$arr = array('aa','ac','ab');
sort($arr); //排序英文字母,比较第一个,第二个字母,按从小到大排序
foreach ($arr as $i)
{
    echo $i . PHP_EOL;
}

2.asort()(对键进行排序)

<?php
$arr = array('aa'=>2,'ac'=>1,'ab'=>3);
asort($arr); //排序英文字母,比较第一个,第二个字母,按从小到大排序
foreach ($arr as $i=>$j)
{
    echo $i . $j.  PHP_EOL;
}

3.ksort()对键进行排序

 <?php
$arr = array('ca'=>2,'ad'=>1,'ab'=>3);
ksort($arr); //排序英文字母,比较第一个,第二个字母,按从小到大排序
foreach ($arr as $i=>$j)
{
    echo $i . $j.  PHP_EOL;
}

rsort()、arsort()和 krsort(),反向排序(和上面数组一一对应,但是排序结果刚好相反)

2.多维数组排序

1.array_multisort()

<?php
$arr1 = array(
    array("csd"=>1,"asdf"=>2,"asdfg"=>3),
    array("asd"=>1,"asdf"=>2,"asdfg"=>3),
    array("dsd"=>1,"asdf"=>2,"asdfg"=>3)
);
array_multisort($arr1,SORT_DESC);
//SORT_ASC:升序
//SORT_DESC相反
foreach ($arr1[0] as $a=>$y)
{
    echo $a . $y;
}

2.用户自定义排序

<?php
$arr1 = array(
    array(1,2,3),
    array(2,3,1),
    array(3,1,2)
);
function compare($x,$y)
{
    if($x[0]<$y[0])
    {
        return 1;
    }else if($x[0]==$y[0])
    {
        return 0;
    }
    else
    {
        return -1;
    }
}
usort($arr1,'compare');//改变数组排序的顺序
foreach ($arr1[0] as $x)
{
    echo $x .PHP_EOL;
}

3.shuffle()随机排序,可以用来生成动态页面

<?php
$picture  = array('picture/1.jpg','picture/2.jpg','picture/3.jpg');
shuffle($picture);
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>PHP cookie</title>
</head>
<body>
<h1>Bob's Auto Parts</h1>
<div align="center">
    <table style="width: 100%; border: 0">
        <tr>
            <?php
            for($i = 1;$i<=3;$i++)
            {
                echo "<td style=\"width: 33% ;  text-align: center\">
    <img style='width: 100px ; width: 100px' src=\"". $picture[$i-1] ."\"/>
</td>";
            }
            ?>
        </tr>
    </table>
</div>
</body>
</html>

3.数组指针

<?php
$number = range(1,10,-1);
echo current($number) . PHP_EOL;//返回当前指针所指向的元素

echo next($number) . PHP_EOL;//指针向后移一位,并返回移动一位后的元素

echo prev($number) . PHP_EOL; //指针向前移一位,并返回移动一位后的元素

echo end($number) . PHP_EOL; //指针指向最后一个,并返回最后一个元素

echo reset($number) . PHP_EOL;//指针指向第一个,并返回第一个元素

实例:

逆序输出数组的内容:

<?php
$number = range(1,10);
$arr  = end($number);
while ($arr)
{
    echo $arr .PHP_EOL;
    $arr = prev($number);
}
<?php
$arr  = [1,1,2,3,1,2,3];
$x1 = count($arr);
$arr2 = sizeof($arr);
//以上两个函数功能相同,都是计算数组中元素的个数,如果是空数组,则返回0
$arr3 = array_count_values($arr);
echo $arr3[2];//[x],$arr[x],就是x在数组中出现的次数

4.其他

1.将数组转换为字符串(implode)

<?php
//implode函数将数组用第一个函数连接起来
$arr = ["dd","asdi"];
$arr = implode(',',$arr);
echo $arr;

2.将字符串转换为数组(explode)

<?php
$string = 'ajsWdh@sdkfj';
$email = explode('@',$string);
echo $email[0] . "   " .$email[1];
//explode:将$string在@的地方分割为两个字符串

3.array_push和array_pop()

4.

对于一个非数字索引数组,而该数组又有许多关键字-值对,可以使用函数extract() 将它们转换成一系列的标量变量

extract( $arr [,** int extract_type] [, string prefix]);

extract_type参数的可用值

类 型意 义
EXTR_OVERWRITE当发生冲突时覆盖已有变量
EXTR_SK1P当发生冲突时跳过一个元素
EXTR_PREFIX_SAME当发生冲突时创建一个名为Sprefix key的变量。必须提供prefix参数
EXTR_PREFIX_ALL在所有变量名称之前加上由prefix参数的指定值°必须提供prefix参数
EXTR_PREFIX_INVALID使用指定的prefix在可能无效的变量名称前加上前缀(例如,数字变量名 称)。必须提供prefix参数
EXTR_IF_EXISTS只提取已经存在的变量(即用数组中的值覆盖已有的变量值)。这个参数对 于数组到变量的转换非常有用,例如,$_REQUEST到一个有效的变量集合 的转换
EXTR_PREFIX_IF_EXISTS只有在不带前缀的变量已经存在的情况下,创建带有前缀的变量。这个值 是在4.2.0版本中新增加的
EXTR_REFS以引用方式提取变量

 

列:

<?php
$arr = array('key1'=>'d','key2'=>'ads');
extract($arr);
echo "$key1 $key2";

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安全天天学

你的鼓励是对我最大的鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值