关于PHP的数组问题之函数

一、array_change_key_case — 将 array 数组中的所有键名改为全小写或大写

array_change_key_case ---- 针对关联数组
array_change_key_case ( array $array [, int $case = CASE_LOWER ] ) : array

$case值:CASE_UPPER (大写),CASE_LOWER(小写,默认值)

array_change_key_case()将 array 数组中的所有键名改为全小写或大写。本函数不改变数字索引。

—————————————————————————————————————————————

二、array_chunk — 将一个数组分割成多个 --(常用)

array_chunk:将一个数组分割成多个数组,其中每个数组的单元数目由 size 决定。最后一个数组的单元数目可能会少于 size 个


array_chunk ( array $array , int $size [, bool $preserve_keys = false ] ) : array

size
  每个数组的单元数目
preserve_keys
  设为 TRUE,可以使 PHP 保留输入数组中原来的键名。如果你指定了 FALSE,那每个结果数组将用从零开始的新数字索引。默认值是 FALSE。


Example #1 array_chunk() 例子

$input_array = array('a', 'b', 'c', 'd', 'e');
print_r(array_chunk($input_array, 2));
print_r(array_chunk($input_array, 2, true));
?>

以上例程会输出:

(
    [0] => Array
        (
            [0] => a
            [1] => b
        )

    [1] => Array
        (
            [0] => c
            [1] => d
        )

    [2] => Array
        (
            [0] => e
        )

)

Array
(
    [0] => Array
        (
            [0] => a
            [1] => b
        )

    [1] => Array
        (
            [2] => c
            [3] => d
        )

    [2] => Array
        (
            [4] => e
        )
)

—————————————————————————————————————————————

三、array_column — 返回数组中指定的一列 -- 常用

array_column ( array $input , mixed $column_key [, mixed $index_key = null ] ) : array

array_column()返回input数组中键值为column_key的列, 如果指定了可选参数index_key,那么input数组中的这一列的值将作为返回数组中对应值的键。


参数说明
input
 需要取出数组列的多维数组。 如果提供的是包含一组对象的数组,只有 public 属性会被直接取出。 为了也能取出 private 和 protected 属性,类必须实现 __get() 和 __isset() 魔术方法。
column_key
 需要返回值的列,它可以是索引数组的列索引,或者是关联数组的列的键,也可以是属性名。 也可以是NULL,此时将返回整个数组(配合index_key参数来重置数组键的时候,非常管用)
index_key
 作为返回数组的索引/键的列,它可以是该列的整数索引,或者字符串键值。
将键与值合并

返回值
 从多维数组中返回单列数组。

—————————————————————————————————————————————

四、array_combine — 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值 -- (较常用)

array_combine ( array $keys , array $values ) : array
 返回一个 array,用来自 keys 数组的值作为键名,来自 values 数组的值作为相应的值。
array_combine()


exp:
        $arr= ['姓名','年龄','身高','性别'];
        $arrValue = ['小米','18','180','男'];
        var_dump(array_combine($arr, $arrValue));
结果:
          array (size=4)
        '姓名' => string '小米' (length=6)
        '年龄' => string '18' (length=2)
        '身高' => string '180' (length=3)
        '性别' => string '男' (length=3)

—————————————————————————————————————————————

五、array_count_values — 统计数组中所有的值

array_count_values ( array $array ) : array
array_count_values() 返回一个数组: 数组的键是 array 里单元的值; 数组的值是 array 单元的值出现的次数。


Example #1 array_count_values() 例子

<?php
$array = array(1, "hello", 1, "world", "hello");
print_r(array_count_values($array));
?>

以上例程会输出:

Array
(
    [1] => 2
    [hello] => 2
    [world] => 1
)

—————————————————————————————————————————————

六、计算数组的交集“家族”

1、array_diff_assoc — 带索引检查计算数组的差集(比较键与值)


Example #1 array_diff_assoc() 例子
  下面的例子中可以看到键值对 "a" => "green" 在两个数组中都有,因此不在本函数的输出中。与此不同,键值对 0 => "red" 出现在输出中是因为第二个参数中的 "red" 的键名是 1。

<?php
$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "green", "yellow", "red");
$result = array_diff_assoc($array1, $array2);
print_r($result);
?>

以上例程会输出:

Array
(
    [b] => brown
    [c] => blue
    [0] => red
)

Example #2 array_diff_assoc() example
  键值对 key => value 中的两个值仅在 (string) elem1 === (string)elem2 时被认为相等。也就是说使用了严格检查,字符串的表达必须相同。
array_merge() 函数用于把一个或多个数组合并为一个数组。
提示:您可以向函数输入一个或者多个数组。
注释:如果两个或更多个数组元素有相同的键名,则最后的元素会覆盖其他元素。
注释:如果您仅仅向 array_merge() 函数输入一个数组,且键名是整数,则该函数将返回带有整数键名的新数组,其键名以 0 开始进行重新索引
注释: 如果为索引数组则不会覆盖元素

<?php
$array1 = array(0, 1, 2);
$array2 = array("00", "01", "2");
$result = array_diff_assoc($array1, $array2);
print_r($result);
?>

以上例程会输出:

Array
(
    [0] => 0
    [1] => 1
)

Note: 注意本函数只检查了多维数组中的一维。当然可以用 array_diff_assoc(array1[0],array2[0]); 检查更深的维度。
Note: 使用更多的键比较相似数组时,确保你传入参数的顺序是正确的。 新的数组应该是在列表里的第一个。


2、array_diff_key — 使用键名比较计算数组的差集

Example #1 array_diff_key() 例
  在 key => value 对中的两个键名仅在 (string) key1 === (string)key2 时被认为相等。换句话说,执行的是严格类型检查,因此字符串的表达必须完全一样。

<?php
$array1 = array('blue'  => 1, 'red'  => 2, 'green'  => 3, 'purple' => 4);
$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan'   => 8);
var_dump(array_diff_key($array1, $array2));
?>

以上例程会输出:

array(2) {
  ["red"]=>
  int(2)
  ["purple"]=>
  int(4)
}
  注释:以上函数是用$array1来和$array2比较返回$array1在$array2中不一样的值

3、array_diff_uassoc — 用用户提供的回调函数做索引检查来计算数组的差集(自定义函数来控制)

Example #1 array_diff_uassoc() 例子
  下面的例子中 "a" => "green" 出现在两个数组中因此不在函数的输出中。但是 0 => "red" 却在输出中,因为第二个参数中的 "red" 的键名是 1。

<?php
function key_compare_func($a, $b)
{
    if ($a === $b) {
        return 0;
    }
    return ($a > $b)? 1:-1;
}

$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "green", "yellow", "red");
$result = array_diff_uassoc($array1, $array2, "key_compare_func");
print_r($result);
?>

以上例程会输出:

Array
(
    [b] => brown
    [c] => blue
    [0] => red
)

4、array_diff_ukey — 用回调函数对键名比较计算数组的差集

Example #1 array_diff_ukey() 例子

<?php
function key_compare_func($key1, $key2)
{
    if ($key1 == $key2)
        return 0;
    else if ($key1 > $key2)
        return 1;
    else
        return -1;
}

$array1 = array('blue'  => 1, 'red'  => 2, 'green'  => 3, 'purple' => 4);
$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan'   => 8);

var_dump(array_diff_ukey($array1, $array2, 'key_compare_func'));
?>

以上例程会输出:

array(2) {
  ["red"]=>
  int(2)
  ["purple"]=>
  int(4)
}

5、array_diff — 计算数组的差集(很常见) --- 比较数组中的值

Example #1 array_diff() 例子

<?php
$array1 = array("a" => "green", "red", "blue", "red");
$array2 = array("b" => "green", "yellow", "red");
$result = array_diff($array1, $array2);
print_r($result);
?>

在 $array1 中多次出现的值一样处理,输出结果为:

Array
(
    [1] => blue
)

—————————————————————————————————————————————

七、array_flip — 交换数组中的键和值

array_flip ( array $array ) : array
array_flip() 返回一个反转后的 array,例如 array 中的键名变成了值,而 array 中的值成了键名。


注意 :array 中的值需要能够作为合法的键名(例如需要是 integer (整型)或者 string(字符串))。如果类型不对,将出现一个警告,并且有问题的键/值对将不会出现在结果里。
如果同一个值出现多次,则最后一个键名将作为它的值,其它键会被丢弃
失败了会返回NULL

Example #1 array_count_values() 例子

<?php
$input = array("oranges", "apples", "pears");
$flipped = array_flip($input);

print_r($flipped);
?>

以上结果输出为:

Array
(
    [oranges] => 0
    [apples] => 1
    [pears] => 2
)

Example #2 array_flip() 例子 : 冲突

<?php
$input = array("a" => 1, "b" => 1, "c" => 2);
$flipped = array_flip($input);

print_r($flipped);
?>

以上结果输出为:

Array
(
    [1] => b
    [2] => c
)
数组$input中以'a'为键的不会返回--因为对应的值为1

—————————————————————————————————————————————

八、array_intersect -- 检查数组的交集家族 (都以第一个数组为主值)

  (一)array_intersect_assoc — 带索引检查计算数组的交集

array_intersect_assoc ( array $array1 , array $array2 [, array $... ] ) : array

array_intersect_assoc() 返回一个数组,该数组包含了所有在 array1 中也同时出现在所有其它参数数组中的值。注意和array_intersect() 不同的是键名也用于比较。
键与值必须都一样才会返回

Example #1 array_intersect_assoc() 例子

<?php
$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "green", "b" => "yellow", "blue", "red");
$result_array = array_intersect_assoc($array1, $array2);
print_r($result_array);
?>

以上例程会输出:

Array
(
    [a] => green
)

—————————————————————————————————————————————

  (二)array_intersect_key — 使用键名比较计算数组的交集

array_intersect_key ( array $array1 , array $array2 [, array $... ] ) : array

array_intersect_key() 返回一个数组,该数组包含了所有出现在 array1 中并同时出现在所有其它参数数组中的键名的值。

<?php
$array1 = array('blue'  => 1, 'red'  => 2, 'green'  => 3, 'purple' => 4);
$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan'   => 8);

var_dump(array_intersect_key($array1, $array2));
?>

以上例程会输出:

array(2) {
  ["blue"]=>
  int(1)
  ["green"]=>
  int(3)
}
键名一样就行,但返回的值是以第一个数组为主

(三)array_intersect — 计算数组的交集

array_intersect ( array $array1 , array $array2 [, array $... ] ) : array

array_intersect() 返回一个数组,该数组包含了所有在 array1 中也同时出现在所有其它参数数组中的值。注意键名保留不变。

Example #1 array_intersect() 例子

<?php
$array1 = array("a" => "green", "red", "blue");
$array2 = array("b" => "green", "yellow", "red");
$result = array_intersect($array1, $array2);
print_r($result);
?>

以上例程会输出:

Array
(
    [a] => green
    [0] => red
)

Note: 以上系列函数中对比时两个单元仅在 (string) elem1 === (string)elem2 时被认为是相同的。也就是说,当字符串的表达是一样的时候。

—————————————————————————————————————————————

九、array_key_exists — 检查数组里是否有指定的键名或索引(别名: key_exists)

array_key_exists ( mixed $key , array $array ) : bool
数组里有键 key 时,array_key_exists() 返回 TRUE。 key 可以是任何能作为数组索引的值。

Note:
array_key_exists() 仅仅搜索第一维的键。 多维数组里嵌套的键不会被搜索到。

array_key_exists()、empty()、isset()的简单区别

—————————————————————————————————————————————

十、array_keys — 返回数组中部分的或所有的键名

array_keys ( array $array [, mixed $search_value = null [, bool $strict = false ]] ) : array

参数
input
一个数组,包含了要返回的键。
search_value
如果指定了这个参数,只有包含这些值的键才会返回。
strict
判断在搜索的时候是否该使用严格的比较(===)。
—————————————————————————————————————————————
返回值
返回 input 里的所有键。


Example #1 array_keys() 例子

<?php
$array = array(0 => 100, "color" => "red");
print_r(array_keys($array));

$array = array("blue", "red", "green", "blue", "blue");
print_r(array_keys($array, "blue"));

$array = array("color" => array("blue", "red", "green"),
               "size"  => array("small", "medium", "large"));
print_r(array_keys($array));
?>

以上例程会输出:

Array
(
    [0] => 0
    [1] => color
)
Array
(
    [0] => 0
    [1] => 3
    [2] => 4
)
Array
(
    [0] => color
    [1] => size
)

—————————————————————————————————————————————

十一、array_merge_recursive递归地合并一个或多个数组

array_merge_recursive ( array $array1 [, array $... ] ) : array

array_merge_recursive()将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。注:无论是索引数组还是关联数组
  如果输入的数组中有相同的字符串键名,则这些值会被合并到一个数组中去,这将递归下去,因此如果一个值本身是一个数组,本函数将按照相应的条目把它合并为另一个数组。需要注意的是,如果数组具有相同的数值键名,后一个值将不会覆盖原来的值,而是附加到后面。


Example #1 array_merge_recursive() 例子

<?php
$ar1 = array("color" => array("favorite" => "red"), 5);
$ar2 = array(10, "color" => array("favorite" => "green", "blue"));
$result = array_merge_recursive($ar1, $ar2);
print_r($result);
?>

以上例程会输出:

Array
(
    [color] => Array
        (
            [favorite] => Array
                (
                    [0] => red
                    [1] => green
                )

            [0] => blue
        )

    [0] => 5
    [1] => 10
)

—————————————————————————————————————————————

十二、array_merge — 合并一个或多个数组

array_merge ( array $array1 [, array $... ] ) : array

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


Example #1 array_merge() 例子

<?php
$array1 = array("color" => "red", 2, 4);
$array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4);
$result = array_merge($array1, $array2);
print_r($result);
?>

以上例程会输出:

Array
(
    [color] => green
    [0] => 2
    [1] => 4
    [2] => a
    [3] => b
    [shape] => trapezoid
    [4] => 4
)

如果你想完全保留原有数组并只想新的数组附加到后面,用 + 运算符(同键名时保留第一个,忽略第二个)


Example #2 Simple array_merge() 例子

<?php
$array1 = array();
$array2 = array(1 => "data");
$result = array_merge($array1, $array2);
?>

以上例程会输出:(别忘了数字键名将会被重新编号!)

Array
(
    [0] => data
)

—————————————————————————————————————————————

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


作者看了半天没看懂,思维太肤浅了
—————————————————————————————————————————————

十四、在数组中进行加与乘运算的函数

(一)array_product — 计算数组中所有值的乘积

array_product ( array $array ) : number

array_product() 以整数或浮点数返回一个数组中所有值的乘积。
5.3.6 空数组现在会产生 1,而之前此函数处理空数组会产生 0。


Example #1 array_product() 例子

<?php

$a = array(2, 4, 6, 8);
echo "product(a) = " . array_product($a) . "\n";
echo "product(array()) = " . array_product(array()) . "\n";
?>

以上例程会输出:

product(a) = 384
product(array()) = 1

(二)array_sum — 对数组中所有值求和

array_sum ( array $array ) : number
array_sum() 将数组中的所有值相加,并返回结果。

返回值说明
所有值的和以整数或浮点数的结果返回,array 为空时则返回 0。


Example #1 array_sum() 例子

<?php
$a = array(2, 4, 6, 8);
echo "sum(a) = " . array_sum($a) . "\n";

$b = array("a" => 1.2, "b" => 2.3, "c" => 3.4);
echo "sum(b) = " . array_sum($b) . "\n";
?>

以上例程会输出:

sum(a) = 20
sum(b) = 6.9

—————————————————————————————————————————————

十五、array_reverse — 返回单元顺序相反的数组

array_reverse ( array $array [, bool $preserve_keys = FALSE ] ) : array
array_reverse() 接受数组 array 作为输入并返回一个单元为相反顺序的新数组。

参数说明
array
输入的数组。
preserve_keys
如果设置为 TRUE 会保留数字的键。 非数字的键则不受这个设置的影响,总是会被保留。


Example #1 array_reverse() 例子

<?php
$input  = array("php", 4.0, array("green", "red"));
$reversed = array_reverse($input);
$preserved = array_reverse($input, true);

print_r($input);
print_r($reversed);
print_r($preserved);
?>

以上结果会输出:

Array
(
    [0] => php
    [1] => 4
    [2] => Array
        (
            [0] => green
            [1] => red
        )

)
Array
(
    [0] => Array
        (
            [0] => green
            [1] => red
        )

    [1] => 4
    [2] => php
)
Array
(
    [2] => Array
        (
            [0] => green
            [1] => red
        )

    [1] => 4
    [0] => php
)

—————————————————————————————————————————————

十六、array_unique — 移除数组中重复的值 (较常用)

array_unique ( array $array [, int $sort_flags = SORT_STRING ] ) : array

array_unique()接受 array 作为输入并返回没有重复值的新数组。
注意键名保留不变。array_unique() **先将值作为字符串排序,然后对每个值只保留第一个遇到的键名**,接着忽略所有后面的键名。这并不意味着在未排序的 array 中同一个值的第一个出现的键名会被保留。
Note: 当且仅当 (string) elem1 === (string)elem2 时两个单元被认为相同。 例如,字符串表达一样时,会使用首个元素。

参数说明
array
输入的数组。
sort_flags
第二个可选参数sort_flags 可用于修改排序行为:
排序类型标记:
SORT_REGULAR - 按照通常方法比较(不修改类型)
SORT_NUMERIC - 按照数字形式比较
SORT_STRING - 按照字符串形式比较(默认值)
SORT_LOCALE_STRING - 根据当前的本地化设置,按照字符串比较。


Example #1 array_unique() 例子

<?php
$input = array("a" => "green", "red", "b" => "green", "blue", "red");
$result = array_unique($input);
print_r($result);
?>

以上例程会输出:

Array
(
    [a] => green
    [0] => red
    [1] => blue
)

Example #2 array_unique() 和类型

<?php
$input = array(4, "4", "3", 4, 3, "3");
$result = array_unique($input);
var_dump($result);
?>

以上例程会输出:

array(2) {
  [0] => int(4)
  [2] => string(1) "3"
}

—————————————————————————————————————————————

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

array_unshift ( array &$array [, mixed $... ] ) : int

array_unshift() 将传入的单元插入到 array 数组的开头。注意单元是作为整体被插入的,因此传入单元将保持同样的顺序。所有的数值键名将修改为从零开始重新计数,所有的文字键名保持不变。
注意: 返回值
返回 array 数组新的单元数目

Notice:
7.3.0 现在可以只用一个参数来调用,之前至少需要两个参数。


Example #1 array_unshift() 例子

$queue = array("orange", "banana");
array_unshift($queue, "apple", "raspberry");
print_r($queue);
?>

以上例程会输出:

Array
(
    [0] => apple
    [1] => raspberry
    [2] => orange
    [3] => banana
)

—————————————————————————————————————————————

十八、array_values — 返回数组中所有的值

array_values ( array $array ) : array
array_values() 返回 input 数组中所有的值并给其建立数字索引
换句话说返回的结果会返回含所有值的索引数组


Example #1 array_values() 例子

<?php
$array = array("size" => "XL", "color" => "gold");
print_r(array_values($array));
?>

以上例程会输出:

Array
(
    [0] => XL
    [1] => gold
)

—————————————————————————————————————————————

更多的数组函数详情可参考官网-->

本人觉得PHP在对数组的介绍还是挺详细的(拙见)


—————————————————————————————————————————————

十九、关于数组的排序问题-->更多好看的数组排序

1) sort — 对数组排序

sort ( array &$array [, int $sort_flags = SORT_REGULAR ] ) : bool
本函数对数组进行排序。当本函数结束时数组单元将被从最低到最高重新安排。

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


2) rsort — 对数组逆向排序

rsort ( array &$array [, int $sort_flags = SORT_REGULAR ] ) : bool
数对数组进行逆向排序(最高到最低)。

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


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

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

本函数对数组进行排序,数组的索引保持和单元的关联。
主要用于对那些单元顺序很重要的结合数组进行排序。
键不变,根据值来排序

参数
array
要排序的数组。
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_STRING 或 SORT_NATURAL 合并(OR 位运算),不区分大小写排序字符串。


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

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

本函数对数组进行排序,数组的索引保持和单元的关联。主要用于对那些单元顺序很重要的结合数组进行排序。
键不变,根据值来排序


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

krsort ( array &$array [, int $sort_flags = SORT_REGULAR ] ) : bool
对数组按照键名逆向排序,保留键名到数据的关联。主要用于结合数组。


6) ksort — 对数组按照键名排序

ksort ( array &$array [, int $sort_flags = SORT_REGULAR ] ) : bool
对数组按照键名排序,保留键名到数据的关联。本函数主要用于关联数组。


返回值统一说明
成功时返回 TRUE, 或者在失败时返回 FALSE。

—————————————————————————————————————————————

二十、in_array — 检查数组中是否存在某个值(区分大小写)

in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] ) : bool
大海捞针,在大海(haystack)中搜索针( needle),如果没有设置 strict 则使用宽松的比较。

参数
needle
待搜索的值。
Note:
如果 needle 是字符串,则比较是区分大小写的。
haystack
待搜索的数组。
strict
如果第三个参数 strict 的值为 TRUE 则 in_array() 函数还会检查 needle 的类型是否和 haystack 中的相同。
返回值
如果找到 needle 则返回 TRUE,否则返回 FALSE。


特殊例子 Example #3 in_array() 中用数组作为 needle

<?php
$a = array(array('p', 'h'), array('p', 'r'), 'o');

if (in_array(array('p', 'h'), $a)) {
    echo "'ph' was found\n";
}

if (in_array(array('f', 'i'), $a)) {
    echo "'fi' was found\n";
}

if (in_array('o', $a)) {
    echo "'o' was found\n";
}
?>

以上例程会输出:

  'ph' was found
  'o' was found

—————————————————————————————————————————————

二十一、list — 把数组中的值赋给一组变量(不太明白)

list ( mixed $var1 [, mixed $... ] ) : array

array() 一样,这不是真正的函数,而是语言结构。 list() 可以在单次操作内就为一组变量赋值。

Note:
在 PHP 7.1.0 之前的版本,list() 仅能用于数字索引的数组,并假定数字索引从 0 开始。


Warning PHP 5 里,list() 从最右边的参数开始赋值; PHP 7 里,list() 从最左边的参数开始赋值。
如果你用单纯的变量,不用担心这一点。 但是如果你用了具有索引的数组,通常你期望得到的结果和在 list() 中写的一样是从左到右的,但在 PHP 5 里实际上不是, 它是以相反顺序赋值的。 通常而言,不建议依赖于操作的顺序,在未来可能会再次发生修改。

Warning在 list() 执行过程中修改数组(比如使用 list($a, $b) = $b)将会产生不可预知的结果。

—————————————————————————————————————————————

二十二、natsort — 用“自然排序”算法对数组排序

natsort ( array &$array ) : bool

 本函数实现了一个和人们通常对字母数字字符串进行排序的方法一样的排序算法并保持原有键/值的关联,这被称为“自然排序”。本算法和通常的计算机字符串排序算法(用于 sort())的区别见下面示例。
Example #1 natsort() 基本用法的操作示例

<?php
$array1 = $array2 = array("img12.png", "img10.png", "img2.png", "img1.png");

asort($array1);
echo "Standard sorting\n";
print_r($array1);

natsort($array2);
echo "\nNatural order sorting\n";
print_r($array2);
?>

以上例程会输出:

Standard sorting
Array
(
    [3] => img1.png
    [1] => img10.png
    [0] => img12.png
    [2] => img2.png
)

Natural order sorting
Array
(
    [3] => img1.png
    [2] => img2.png
    [1] => img10.png
    [0] => img12.png
)

Example #2 natsort() examples demonstrating potential gotchas(潜在的陷阱)

<?php
第一个是关于正负数的陷阱
echo "Negative numbers\n";
$negative = array('-5','3','-2','0','-1000','9','1');
print_r($negative);
natsort($negative);
print_r($negative);

第二个是关于前置零的陷阱
echo "Zero padding\n";
$zeros = array('09', '8', '10', '009', '011', '0'); 
print_r($zeros);
natsort($zeros);
print_r($zeros);
?>

以上例程会输出:

Negative numbers
Array
(
    [0] => -5
    [1] => 3
    [2] => -2
    [3] => 0
    [4] => -1000
    [5] => 9
    [6] => 1
)
Array
(
    [2] => -2
    [0] => -5
    [4] => -1000
    [3] => 0
    [6] => 1
    [1] => 3
    [5] => 9
)

Zero padding
Array
(
    [0] => 09
    [1] => 8
    [2] => 10
    [3] => 009
    [4] => 011
    [5] => 0
)
Array
(
    [5] => 0
    [1] => 8
    [3] => 009
    [0] => 09
    [2] => 10
    [4] => 011
)

—————————————————————————————————————————————

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

natcasesort ( array &$array ) : bool

natcasesort() 是 natsort() 函数的不区分大小写字母的版本。
本函数实现了一个和人们通常对字母数字字符串进行排序的方法一样的排序算法并保持原有键/值的关联,这被称为“自然排序”。


排序方法还有:

  • strnatcmp() - 使用自然排序算法比较字符串(区分大小写)
  • strnatcasecmp() - 使用“自然顺序”算法比较字符串(不区分大小写)
    —————————————————————————————————————————————

二十四、range — 根据范围创建数组,包含指定的元素

range ( mixed $start , mixed $end [, number $step = 1 ] ) : array
建立一个包含指定范围单元的数组。

参数说明
start
序列的第一个值。
end
序列结束于 end 的值。
step
如果设置了步长 step,会被作为单元之间的步进值。step 应该为正值。不设置step 则默认为 1。


Example #1 range() 例子

<?php
// array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
foreach (range(0, 12) as $number) {
    echo $number;
}

//  step 参数
// array(0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100)
foreach (range(0, 100, 10) as $number) {
    echo $number;
}

// 字符序列的使用
// array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i');
foreach (range('a', 'i') as $letter) {
    echo $letter;
}
// array('c', 'b', 'a');
foreach (range('c', 'a') as $letter) {
    echo $letter;
}
?>

—————————————————————————————————————————————

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容

  • 一、数组定义 array() 1、索引数组 在一个变量中,存储一个或多个值。数组中的每一个元素都有一个访问ID,根...
    竹与豆阅读 525评论 0 0
  • # 数组部分 # 1.## array_chunk($arr, $size [, $preserve_key = ...
    clothTiger阅读 1,155评论 0 1
  • PHP数组函数,摘录于PHP手册 1、array_change_key_case (PHP 4 >= 4.2.0,...
    kotlin360阅读 698评论 2 1
  • 数组的概述 PHP 中的数组实际上是一个有序图。图是一种把 values 映射到 keys 的类型。此类型在很多方...
    dptms阅读 1,589评论 0 4
  • 1.strlen()与mb_strlen()的作用分别是什么? strlen()和mb_strlen()都是作用于...
    落魄PHP女程序员阅读 345评论 0 2