7.8 查询数组中指定元素
数组是一个数据集合。能够在不同类型的数组和不同结构的数组内确定某个特定元素是否存在,是必要的。PHP提供in_array()、array_key_exists()、array_search()、array_keys()和array_values()按照不同方式查询数组元素。
下面的例子介绍查询数字索引数组和联合索引数组,并且都是一维数组。
【例7.14】(实例文件:ch07\7.14.php)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/ DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <HEAD><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><h2>查询一维数组。 </h2></HEAD> <BODY> <?php $roomtypes = array( '单床房','标准间','三床房','VIP套房'); $prices_per_day = array('单床房'=> 298,'标准间'=> 268,'三床房'=> 198,'VIP套房'=> 368); if(in_array( '单床房',$roomtypes)){echo '单床房元素在数组$roomtypes中。<br />';} if(array_key_exists( '单床房',$prices_per_day)){echo '键名为单床房的元素在数组$prices_per_day中。<br / >';} if(array_search( 268,$prices_per_day)){echo '值为268的元素在数组$prices_per_day中。<br />';} $prices_per_day_keys = array_keys($prices_per_day); print_r($prices_per_day_keys); $prices_per_day_values = array_values($prices_per_day); print_r($prices_per_day_values); ?> </BODY> </HTML>
运行结果如图7-15所示。
【案例分析】
(1)数组$roomtypes为一个数字索引数组。in_array( '单床房',$roomtypes)判定元素'单床房'是否在数组$roomtypes中,如果在,则返回true。if语句得到返回值为真,便打印如图7-15所示的表述。
(2)数组$prices_per_day为一个联合索引数组。array_key_exists( '单床房',$prices_per_day)判定一个键值为'单床房'的元素是否在数组$prices_per_day中,如果在,则返回true。if语句得到返回值为真,便打印如图7-15所示的表述。array_key_exists()是专门针对联合数组的“键名”进行查询的函数。
(3)array_search()是专门针对联合数组的“元素值”进行查询的函数。同样针对数组$prices_per_day这个联合数组。array_search( 268,$prices_per_day)判定一个元素值为268的元素是否在数组$prices_per_day中,如果在,则返回true。if语句得到返回值为真,便打印如图7-15所示的表述。
(4)函数array_keys()是取得数组“键值”,并把键值作为数组元素输出为一个数字索引数组的函数,主要用于联合索引数组。array_keys($prices_per_day)获得数组$prices_per_day的键值,并把它赋值给变量$prices_per_day_keys为一个数组。用print_r()打印如图7-15所示的表述。函数array_keys()虽然也可以取得数字索引数组的数字索引,但是这样意义不大。
(5)函数array_values()是取得数组元素的“元素值”,并把元素值作为数组元素输出为一个数字索引数组的函数。array_values($prices_per_day)获得数组$prices_per_day的元素值,并把它赋值给变量$prices_per_day_values为一个数组。用print_r()打印如图7-15所示的表述。
这几个函数只是针对一维数组,无法用于多维数组。它们在查询多维数组的时候,会只处理最外围的数组,其他内嵌的数组都作为数组元素处理,不会得到内嵌数组内的键值和元素值。