生成验证码---使用数组(及array_combine和array_merge的比较)

完整代码

<?php
header('content-type:text/html;charset=utf-8');

//使用数组生成4位随机验证码
$arr1 = range('a','z');
$arr2 = range('A','Z');
$arr3 = range(0,9);

// print_r($arr1);
// print_r($arr2);
// print_r($arr3);

//合并数组
$arr = array_merge($arr1,$arr2,$arr3);
// print_r($arr);

//随机从数组中收取4个元素
$keys = array_rand($arr,4);
// print_r($keys);
$yzm = '';
foreach($keys as $k){
    $yzm .= $arr[$k];
}
echo $yzm;

输出结果:(因为随机数是不固定的,所以输出可以不太一样)
生成验证码---使用数组(及array_combine和array_merge的比较)

步骤:

1.使用rand函数输出a-z,A-Z,0-9的随机数

<?php
header('content-type:text/html;charset=utf-8');
//使用数组生成4位随机验证码
$arr1 = range('a','z');
$arr2 = range('A','Z');
$arr3 = range(0,9);

print_r($arr1);
print_r($arr2);
print_r($arr3);

输出结果:生成验证码---使用数组(及array_combine和array_merge的比较)

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

$arr = array_merge($arr1,$arr2,$arr3);
print_r($arr);

输出结果:
Array ( [0] => a [1] => b [2] => c [3] => d [4] => e [5] => f [6] => g [7] => h [8] => i [9] => j [10] => k [11] => l [12] => m [13] => n [14] => o [15] => p [16] => q [17] => r [18] => s [19] => t [20] => u [21] => v [22] => w [23] => x [24] => y [25] => z [26] => A [27] => B [28] => C [29] => D [30] => E [31] => F [32] => G [33] => H [34] => I [35] => J [36] => K [37] => L [38] => M [39] => N [40] => O [41] => P [42] => Q [43] => R [44] => S [45] => T [46] => U [47] => V [48] => W [49] => X [50] => Y [51] => Z [52] => 0 [53] => 1 [54] => 2 [55] => 3 [56] => 4 [57] => 5 [58] => 6 [59] => 7 [60] => 8 [61] => 9 )
注:我们会发现,它的索引号发生了变化

3.我们使用array_rand函数返回当前元素所在的键

//随机从数组中收取4个元素
$keys = array_rand($arr,4);
print_r($keys);

4.我们使用foreach循环,得到键所对应的值

$yzm = '';
foreach($keys as $k){
    $yzm .= $arr[$k];
}
echo $yzm;

array_rand

array_rand — 从数组中随机取出一个或多个单元
说明
mixed array_rand ( array $input [, int $num_req = 1 ] )
从数组中取出一个或多个随机的单元,并返回随机条目的一个或多个键。
参数
input 输入的数组。
num_req 指明了你想取出多少个单元。如果指定的数目超过了数组里的数量将会产生一个 E_WARNING 级别的错误。
返回值
如果你只取出一个, array_rand() 返回一个随机单元的键名,否则就返回一个包含随机键名的数组。这样你就可以随机从数组中取出键名和值。

array_merge的其他使用情况

$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
)
注:因为color相同,两个键是字符串,而不是说数字,所以green会覆盖red。如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引。

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

输出结果:Array
(
[0] => data
)
注:别忘了数字键名将会被重新编号!
如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引。

如果你想完全保留原有数组并只想新的数组附加到后面,用 + 运算符:

$array1  = array( 0  =>  'zero_a' ,  2  =>  'two_a' ,  3  =>  'three_a' );
$array2  = array( 1  =>  'one_b' ,  3  =>  'three_b' ,  4  =>  'four_b' );
$result  =  $array1  +  $array2 ;
var_dump ( $result );

输出结果:array(5) {
[0]=>
string(6) “zero_a”
[2]=>
string(5) “two_a”
[3]=>
string(7) “three_a”
[1]=>
string(5) “one_b”
[4]=>
string(6) “four_b”
}
注:在3出现了重复的值,在一个数组中不可能出现两个键名相等的元素,所以arr23使arraymergearr2中的3不会出现。 但是如果使用array-merge,arr1的3将会替代$arr2中的3,同时键名将以连续的方式重新排布.

array_combine

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

$nos = array(1001,1002,1003);
$names = array('张三','李四','王五');
$arr = array_combine($nos,$names);
print_r($arr);

Array ( [1001] => 张三 [1002] => 李四 [1003] => 王五 )

比较array_combine和array_merge的区别

$a = array('green','red',‘yellow');
$b = array('avocado','apple','banana');
$c = array_combine ($a,$b);

print_r ( $c );

输出结果: Array
(
[green] => avocado
[red] => apple
[yellow] => banana
)

$a  = array( 'green' ,  'red' ,  'yellow' );
$b  = array( 'avocado' ,  'apple' ,  'banana' );
$c  =  array_merge ( $a ,  $b );

print_r ( $c );

输出结果:Array ( [0] => green [1] => red [2] => yellow [3] => avocado [4] => apple [5] => banana )