笔记

1.13PHP数组函数 - 图11.13PHP数组函数 - 图2
1.13PHP数组函数 - 图31.13PHP数组函数 - 图4

案例

数组的键/值操作函数

image.png

统计数组元素的个数和唯一性

image.png

数组排序函数

sort— 对数组排序

格式:bool sort ( array&$array [, int$sort_flags = SORT_REGULAR ] )
sort_flags:可选的第二个参数 sort_flags 可以用以下值改变排序的行为:
排序类型标记:

  • SORT_REGULAR - 正常比较单元(不改变类型)
  • SORT_NUMERIC - 单元被作为数字来比较
  • SORT_STRING - 单元被作为字符串来比较
  • SORT_LOCALE_STRING - 根据当前的区域(locale)设置来把单元当作字符串比较,可以用 setlocale() 来改变。
  • SORT_NATURAL - 和 natsort() 类似对每个单元以”自然的顺序”对字符串进行排序。 PHP 5.4.0 中新增的。
  • SORT_FLAG_CASE - 能够与 SORT_STRINGSORT_NATURAL 合并(OR 位运算),不区分大小写排序字符串。

注释:

  • Note: 此函数为 array 中的元素赋与新的键名。这将删除原有的键名,而不是仅仅将键名重新排序。
  • Note: 和大多数 PHP 排序函数一样,sort() 使用了 » Quicksort 实现的。
  • Warning:在对含有混合类型值的数组排序时要小心,因为 sort() 可能会产生不可预知的结果。

    rsort— 对数组逆向排序

    格式:bool rsort ( array&$array [, int$sort_flags = SORT_REGULAR ] )
    cmp_function:在第一个参数小于,等于或大于第二个参数时,该比较函数必须相应地返回一个小于,等于或大于 0 的整数。
    intcallback ( mixed$a, mixed$b );
    注释:

  • Note: 如果两个成员比较结果相同,则它们在排序后的数组中的顺序未经定义。

  • Note: 此函数为 array 中的元素赋与新的键名。这将删除原有的键名,而不是仅仅将键名重新排序。

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

    格式:bool usort ( array&$array , callable$cmp_function )

    asort — 对数组进行排序并保持索引关系

    格式:bool asort ( array&$array [, int$sort_flags = SORT_REGULAR ] )

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

    格式:bool arsort ( array&$array [, int$sort_flags = SORT_REGULAR ] )

    uasort — 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联

    格式:bool uasort ( array&$array , callable$cmp_function )

    ksort — 对数组按照键名排序

    格式:bool ksort ( array&$array [, int$sort_flags = SORT_REGULAR ] )

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

    格式:bool krsort ( array&$array [, int$sort_flags = SORT_REGULAR ] )

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

    格式:bool uksort ( array&$array , callable$cmp_function )
    cmp_function:在第一个参数小于,等于或大于第二个参数时,该比较函数必须相应地返回一个小于,等于或大于 0 的整数。
    intcallback ( mixed$a, mixed$b )

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

    格式:bool natsort ( array&$array )

    natcasesort — 用”自然排序”算法对数组进行不区分大小写字母的排序

    格式:bool natcasesort ( array&$array )

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

    格式:bool array_multisort ( array&$arr [, mixed$arg = SORT_ASC [, mixed$arg = SORT_REGULAR [, mixed$… ]]] )
    arg:接下来的每个参数可以是另一个 array 或者是为之前 array 排序标志选项参数: SORT_ASC, SORT_DESC, SORT_REGULAR, SORT_NUMERIC, SORT_STRING.

    拆分,分解,合并与结合数组

    array_slice —从数组中取出一段

    格式:array array_slice(array array,int offset [, int length [,bool preserve_keys]])
    array_slice()返回根据 offset和length参数所指定的 array数组中的一段序列。 如果offset 非负,则序列将从 array中的此偏移量开始。如果 offset为负,则序列将从array中距离末端这么远的地方开始。 如果给出了lenqth并且为正,则序列中将具有这么多的单元。如果给出了lenqth并且为负则序列将终止在距离数组末端这么远的地方。如果省略,则序列将从ofset开始一直到 array的末端。

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

    格式:array array_splice(array &input,int offset [, int length [, array replacement]])
    array_splice()把input数组中由 offset和length指定的单元去掉,如果提供了 replacement参数,则用replacement数组中的单元取代。返回一个包含有被移除单元的数组。注意input中的数字键名不被保留。 如果offset为正,则从input 数组中该值指定的偏移量开始移除。如果ofset为负,则从input末尾倒数该值指定的偏移量开始移除。 如果省略length,则移除数组中从offset 到结尾的所有部分。 如果给出了replacement数组,则被移除的单元被此数组中的单元替代。

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

    格式:array array combine (array keys, array values)
    返回一个array,用来自keys数组的值作为键名,来自values数组的值作为相应的值。如果两个数组的单元数不同或者数组为空时返回FALSE

    array merge —合并一个或多个数组

    格式:array array merge(array array1[ array array2 [ array .….]])
    array_merge()将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。 如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。 如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引。

    array intersect —计算数组的交集

    格式: array array intersect(array array1, array array2 [, array …])
    array intersect()返回一个数组,该数组包含了所有在 array1中也同时出现在所有其它参数数组中的值。注意键名保留不变。

    array_diff—计算数组的差集

    格式:array array diff(array array1,array array2[, array .….])
    array_diff()返回一个数组,该数组包括了所有在 array1中但是不在任何其它参数数组中的值。注意键名保留不变。

    数组与数据结构

    array_pop—将数组最后一个单元弹出(出栈)

    格式:mixed array_pop(array &array)
    array_pop()弹出并返回array数组的最后一个单元,并将数组array的长度减一。如果array为空(或者不是数组)将返回NULL。

    array_push—将一个或多个单元压入数组的末尾(入栈)

    语法:int array_push(array &array,mixed var [ mixed…])
    array push()将array当成一个栈,并将传入的变量压入array的末尾。array的长度将根据入栈变量的数目增加。

    array shift —将数组开头的单元移出数组

    格式:mixed array_shift(array &array)
    array shift()将array的第一个单元移出并作为结果返回,将array的长度减一并将所有其它单元向前移动一位。所有的数字键名将改为从零开始计数,文字键名将不变。如果array为空(或者不是数组),则返回NULL。

    array_unshift — 在数组开头插入一个或多个单元

    格式:int array unshift(array &array,mixed var [ mixed .…])
    array_unshift()将传入的单元插入到array数组的开头。注意单元是作为整体被插入的,因此传入单元将保持同样的顺序。所有的数值键名将修改为从零开始重新计数,所有的文字键名保持不变。

    上课补充

    list — 把数组中的值赋给一些变量

    格式:array list ( mixed$varname [, mixed$… ] )
    像 array() 一样,这不是真正的函数,而是语言结构。list() 用一步操作给一组变量进行赋值。

    range — 建立一个包含指定范围单元的数组

    格式:array range ( mixed$start , mixed$limit [, number$step = 1 ] )
    建立一个包含指定范围单元的数组。
    start:序列的第一个值。
    limit:序列结束于 limit 的值。
    step:果给出了 step 的值,它将被作为单元之间的步进值。step 应该为正值。如果未指定,step 则默认为 1。
    返回的数组中从 start 到 limit 的单元,包括它们本身。

    each — 返回数组中当前的键/值对并将数组指针向前移动一步

    格式:array each ( array&$array )
    返回数组中当前的键/值对并将数组指针向前移动一步
    在执行 each() 之后,数组指针将停留在数组中的下一个单元或者当碰到数组结尾时停留在最后一个单元。如果要再用 each 遍历数组,必须使用 reset()。
    返回 array 数组中当前指针位置的键/值对并向前移动数组指针。键值对被返回为四个单元的数组,键名为01keyvalue。单元 0key 包含有数组单元的键名,1value 包含有数据。
    如果内部指针越过了数组的末端,则 each() 返回 FALSE

    章节测验

    写函数创建长度为10的数组,数组中的元素为递增的奇数,首项为1.
    方法一:
    function arrsort($first,$length){

$arr = array();
for($i=$first;$i<=$length;$i++){

$arr[] = $i*2-1;
}
return $arr;
}

$arr1 = arrsort(1,10);
print_r($arr1);
方法二:
<?php
echo “

  1. “;
    function arr($frist,$len){
    for ($i = $frist; $i <= $len; $i++) {
    $sum=$i*2-1;
    $array[]=$sum;
    }
    return $array;
    }
    var_dump(arr(1,10));
    ?>
    image.png
  2. 实训

    image.png

  3. 第一种

    <?php
    echo “;
    echo

    “;
    //将数组最后5项直接截取,不改变顺序变为前五项
    function arrsort($arr) {
    $num = count($arr);
    if($num < 10) {
    echo “数组长度不能小于10”;
    return false;
    }else{
    //取出数组后5项
    $arr1 = array_slice($arr, -5);
    //取出数组后5项之前的
    $arr2 = array_slice($arr, 0, -5);
    //合并
    $arr = array_merge($arr1, $arr2);
    return $arr;
    }
    }
    $arr = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
    echo “拼接前的数组”;
    print_r($arr);
    echo
    “;
    $result = arrsort($arr);
    if($result) {
    echo “拼接后的数组”;
    print_r($result);
    }
    ?>
    1.13PHP数组函数 - 图9

  4. 第二种

    <?php
    echo “;
    echo

    “;
    function arrsort($arr){
    $num = count($arr);
    if($num < 10){
    echo “数组不超过10个元素,请重新输入”;
    }else{
    //array_slice($arr,起始位置,截取长度,保留索引(默认为false))
    $arr_firstpart = array_slice($arr,0,$num-5,true);
    $arr_lastpart = array_slice($arr,$num-5,5,true);
    $arr_new = array_merge($arr_lastpart,$arr_firstpart);
    return $arr_new;
    }
    }
    echo
    = = = = = 拼接前 = = = =

    “;
    $arr = array(“a”=>1,2,3,4,5,”b”=>6,7,”c”=>8,9,10);
    print_r($arr);
    echo
    = = = = = 拼接后 = = = =

    “;
    print_r(arrsort($arr));
    ?>
    1.13PHP数组函数 - 图10