6.12 数组实用函数

最后介绍一些一些非常实用又非常常用的数组函数.

array_walk ( array &array, callback funcname [, mixed userdata] )

如果成功则返回 TRUE,失败则返回 FALSE.

将用户自定义函数 funcname 应用到 array 数组中的每个单元.典型情况下 funcname 接受两个参数.array 参数的值作为第一个,键名作为第二个.如果提供了可选参数 userdata,将被作为第三个参数传递给 callback funcname.

示例:

[复制到剪切板]
CODE:
<?php 
function output($val,$key){
    echo 
"php爱好者站推荐:".$val;
    echo 
"\n";
}

$arr = array(
   
'phpfans' => 'www.phpfans.net',
   
'php' => 'www.php.net',
   
'mysql' => 'www.mysql.com',
   
'apache' => 'www.apache.org'
);

array_walk($arr,'output');
?> ;


输出:
php爱好者站推荐:www.phpfans.net
php爱好者站推荐:www.php.net
php爱好者站推荐:www.mysql.com
php爱好者站推荐:www.apache.org
注意:如果希望真正修改数组键/值对,就需要将每个键/值对作为引用传递给函数.引用会在变量那章详细说到
示例:

[复制到剪切板]
CODE:
<?php 
function output(&$val,$key){//&引用调用
    
$val "php爱好者站推荐:".$val;
}

$arr = array(
   
'phpfans' => 'www.phpfans.net',
   
'php' => 'www.php.net',
   
'mysql' => 'www.mysql.com',
   
'apache' => 'www.apache.org'
);

array_walk($arr,'output');
print_r($arr);
?> ;


输出:
Array
(
    [phpfans] => php爱好者站推荐:www.phpfans.net
    [php] => php爱好者站推荐:www.php.net
    [mysql] => php爱好者站推荐:www.mysql.com
    [apache] => php爱好者站推荐:www.apache.org
)
array_unique ( array array )
array_unique() 接受 array 作为输入并返回没有重复值的新数组.

注意键名保留不变.array_unique() 先将值作为字符串排序,然后对每个值只保留第一个遇到的键名,接着忽略所有后面的键名.这并不意味着在未排序的 array 中同一个值的第一个出现的键名会被保留.

注: 当且仅当 (string) $elem1 === (string) $elem2 时两个单元被认为相同.就是说,当字符串的表达一样时.

示例:

[复制到剪切板]
CODE:
<?php
//PHPfans站系列教程:
//http://www.phpfans.net/bbs/forumdisplay.php?fid=25
$arr = array(
   
'phpfans' => 'www.phpfans.net',
   
'php爱好者' => 'www.phpfans.net',
   
'php' => 'www.php.net',
   
'mysql' => 'www.mysql.com',
   
'apache' => 'www.apache.org'
);

$new_arr array_unique($arr);//这个函数是返回一个新数组,并不改变原来的数组
print_r($new_arr);
?> ;


输出:
Array
(
    [phpfans] => www.phpfans.net
    [php] => www.php.net
    [mysql] => www.mysql.com
    [apache] => www.apache.org
)
array_count_values ( array input )

array_count_values() 返回一个数组,该数组用 input 数组中的值作为键名,该值在 input 数组中出现的次数作为值.

示例:

[复制到剪切板]
CODE:
<?php
$arr 
= array(
   
'phpfans' => 'www.phpfans.net',
   
'php爱好者' => 'www.phpfans.net',
   
'php' => 'www.php.net',
   
'mysql' => 'www.mysql.com',
   
'apache' => 'www.apache.org'
);

$new_arr array_count_values($arr);//这个函数是返回一个新数组,并不改变原来的数组
print_r($new_arr);
?> ;


输出:
Array
(
    [www.phpfans.net] => 2
    [www.php.net] => 1
    [www.mysql.com] => 1
    [www.apache.org] => 1
)
extract ( array var_array [, int extract_type [, string prefix]] )

本函数用来将变量从数组中导入到当前的符号表中.接受结合数组 var_array 作为参数并将键名当作变量名,值作为变量的值.对每个键/值对都会在当前的符号表中建立变量,并受到 extract_type 和 prefix 参数的影响.

这个函数也是非常实用的,比如说 $_GET['name'] 可以直接用 $name 是不是更加方便点呢?
当然在 register_globals 为 on 时也可以用 $name,但用extract也可以方便地做到

[复制到剪切板]
CODE:
<?php
$arr 
= array(
   
'phpfans' => 'www.phpfans.net',
   
'php爱好者' => 'www.phpfans.net',
   
'php' => 'www.php.net',
   
'mysql' => 'www.mysql.com',
   
'apache' => 'www.apache.org'
);

extract($arr);
echo 
$phpfans;
?> ;


输出:
www.phpfans.net
array_flip()

array_flip()函数将使数组target_array中键及其相应值倒换角色,并返回一个新的数组.
示例:

[复制到剪切板]
CODE:
<?php 
$arr 
= array(
    
'a' => 'phpfans',
    
'b' => 'php',
    
'c' => 'apache'
);

$new_arr array_flip($arr);
print_r($new_arr);
?> ;


输出:
Array
(
    [phpfans] => a
    [php] => b
    [apache] => c
)
附:数组运算符

$a + $b 联合 $a 和 $b 的联合.
$a == $b 相等 如果 $a 和 $b 具有相同的键/值对则为 TRUE.
$a === $b 全等 如果 $a 和 $b 具有相同的键/值对并且顺序和类型都相同则为 TRUE.
$a != $b 不等 如果 $a 不等于 $b 则为 TRUE.
$a <> $b 不等 如果 $a 不等于 $b 则为 TRUE.
$a !== $b 不全等 如果 $a 不全等于 $b 则为 TRUE.
如履薄冰