Home >Backend Development >PHP Tutorial >PHP数组操作函数小结
这么多的数组函数我们该怎么学习?其实我们只需要清楚,我们需要对数组做哪些操作,然后把这些操作归类,心中就有了大概的印象,然后随着你的实践,这些函数你就很清楚了,在这里提醒大家的是手册要常备!废话不多说,数组函数一般归为以下几类:
print_r()
array()
list() //这个函数和上面提到的 array()一样,只是个语言结构,它通过一步操作给一组变量赋值!
range ( mixed low, mixed high[, number step] ) //建立一个包含指定范围单元的数组
is_array(); //测试变量是否array类型,是则返回true,不是则返回false,很基本,很实用的函数!
in_array();
检查数组中是否存在某个值
bool array_key_exists ( mixed key,array search )
检查给定的键名或索引是否存在于数组中,存在则返回true。
int array_push ( array &target_array,mixed var [, mixed ...] ) //将一个或多个单元从末尾添加至数组!返回新数组的单元总数!
PHP代码:
$states =array( ‘Ohio' , ‘New York' );
array_push ( $states , ‘California' , ‘Texas' );
//output: array((‘Ohio',‘New York' , ‘California',‘Texas');
array_pop(); //弹出并返回数组的最后一个单元,并将数组长度减一。使用后会重置数组指针!
PHP代码:
$states =array( ‘Ohio' , ‘New York' );
$state = array_pop ( $states );
//output: New York
array_shift();
与array_pop类似,只不过它移出和返回的是数组的第一个值。数字键名将重新从零开始记数,文字键名则保持不变!
array_unshift();
与array_push类似,只不过是从数组头部插入数据!数字键名将重新从零开始记数,文字键名则保持不变!
array array_pad ( array input, intpad_size, mixed pad_value )
用值将数组填充到指定长度!pad_size为正,则从右侧开始填补,为负,从左侧开始填补,小与数组长度,则保持数组不变!
array array_keys ( array input [,mixed search_value [, bool strict]] )
返回数组中的所有键名。如果选定search_value,则返回选定的键名!自PHP 5]起,可以用strict参数来进行全等比较( ===)。
array array_values ( array input )
与array_keys()类似!返回的是数组的所有键值!
mixed array_search ( mixed needle,array haystack [, bool strict] )
在 haystack中搜索 needle参数并在找到的情况下返回键名,否则返回 FALSE 。
如果needle是字符串,则比较区分大小写!
如果strict是true,还得比较类型
如果needle在haystack中出现不止一次,则返回第一个匹配的键。要返回所有匹配值的键,应该用array_keys()加上可选参数search_value来代替!
mixed key ( array &array )
返回数组中当前单元的键名!
reset();
重置数组的指针。
each();
返回数组中当前单元的键 /值对,并将指针下移一位!
current();
返回当前被内部指针指向的数组单元的值,并不移动指针。如果超出了单元列表的末端,则返回false。
end();
将 array的内部指针移动到最后一个单元并返回其值。
next();
返回数组内部指针指向的下一个单元的值,或当没有更多单元时返回 FALSE 。
prev();
返回数组内部指针指向的前一个单元的值,或当没有更多单元时返回 FALSE 。
bool array_walk ( array &array,callback funcname [, mixed userdata] )
array array_reverse ( array array [,bool preserve_keys] )
接受数组 array作为输入并返回一个单元为相反顺序的新数组,如果 preserve_keys为 TRUE 则保留原来的键名。
PHP代码:
$states =array( ‘Delaware' , ‘Pennsylvania' , ‘New Jersey' );
print_r ( array_reverse ( $states ));
//Array ([0]=>New Jersey [1]=>Pennsylvania[2]=>Delaware)
$states = array( ‘Delaware' , ‘Pennsylvania' , ‘New Jersey' );
print_r ( array_reverse ( $states , 1 ));
//Array ([2]=>New Jersey [1]=>Pennsylvania[0]=>Delaware)
array array_flip ( array trans )
交换数组中的键 /值对,注意 trans 中的值需要能够作为合法的键名,例如需要是 integer 或者 string。如果值的类型不对将发出一个警告,并且有问题的键/值对将不会反转。
如果同一个值出现了多次,则最后一个键名将作为它的值,所有其它的都丢失了。
PHP代码:
$trans =array( "a" => 1 , "b" => 1 , "c" => 2 );
$trans = array_flip ( $trans );
print_r ( $trans );
//Array([1]=>b[2]=>c );
count();
计算数组中的单元数目或对象中的属性个数
array_count_values();
返回一个数组,该数组用input数组中的值作为键名,该值在input数组中出现的次数作为值。
PHP代码:
$array= array( 1 , "hello" , 1 , "world" , "hello" );
print_r ( array_count_values ( $array ));
array array_unique ( array array )
接受 array作为输入并返回没有重复值的新数组。
PHP代码:
$input =array( "a" => "green" , "red" , "b" => "green" , "blue" , "red" );
$result = array_unique ( $input );
print_r ( $result );
sort();
本函数对数组进行排序。当本函数结束时数组单元将被从最低到最高重新安排。
注意 : 本函数为array中的单元赋予新的键名。这将删除原有的键名而不仅是重新排序。
natsort();
利用自然排序法对数组进行排序!
PHP代码:
$array1 = $array2 = array( "img12.png" , "img10.png" , "img2.png" , "img1.png" );
sort ( $array1 );
echo "Standard sortingn" ;
print_r ( $array1 );
natsort ( $array2 );
echo "nNatural order sortingn" ;
print_r ( $array2 );
natcasesort();
与 natsort()一致,除了不区分大小写!
rsort();
与 sort()一致,这个是逆向排序。
asort();
与 sort()一直,但保持键名不变。
array_multisort();
对多个数组或多维数组进行排序,具体参考手册,有详细说明!
arsort();
与 rsort()类似,但保持键名不变。
ksort();
与 sort()类似,对键名进行排序。
krsort();
与 ksort()类似,但是逆向排序。
usort();
利用用户自定义函数对数组进行排序!
array array_combine ( array keys,array values )
创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值
array array_merge ( array array1 [,array array2 [, array ...]] )
将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。
如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。
然而,如果数组包含数字键名,后面的值将不会 覆盖原来的值,而是附加到后面。
PHP代码:
$array1 =array( "color" => "red" , 2 , 4 );
$array2 = array( "a" , "b" , "color" => "green" , "shape" => "trapezoid" , 4 );
$result = array_merge ( $array1 , $array2 );
print_r ( $result );
如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引。
PHP代码:
$array1 = array();
$array2 = array( 1 => "data" );
$result = array_merge ( $array1 , $array2 );
如果你想完全保留原有数组并只想新的数组附加到后面,用+运算符:
PHP代码:
$array1 = array();
$array2 = array( 1 => "data" );
$result = $array1 + $array2 ;
array array_merge_recursive ( arrayarray1 [, array ...] )
将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。
如果输入的数组中有相同的字符串键名,则这些值会被合并到一个数组中去,这将递归下去,因此如果一个值本身是一个数组,本函数将按照相应的条目把它合并为另一个数组。然而,如果数组具有相同的数组键名,后一个值将不会覆盖原来的值,而是附加到后面。
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 array_slice ( array array, intoffset [, int length [, bool preserve_keys]] )
从数组中取出一段。
如果offset非负,则序列将从array中的此偏移量开始。如果offset为负,则序列将从array中距离末端这么远的地方开始。
如果给出了length并且为正,则序列中将具有这么多的单元。如果给出了length并且为负,则序列将终止在距离数组末端这么远的地方。如果省略,则序列将从offset开始一直到array的末端。