PHP全局变量的问题global
问题描述:
代码链接:http://www.mcqyy.com/RunCode/php/#id/29b4699b9f37cc352dcf1e39c7491e86
代码:
<?php
$arr = array();
main();
array_push($arr,'2');
arrSearch($arr,'2');
arrSearch($arr,'1');
function main(){
global $arr;
array_push($arr,'1');
arrSearch($arr,'1');
}
function arrSearch($arr,$el){
echo "<hr>";
echo "arr:";
print_r($arr);
echo "<br/>";
echo $el.":";
if(array_search($el,$arr)){
echo 'yes';
}else{
echo 'no';
}
}
?>
结果是:
arr:Array ( [0] => 1 )
1:no
arr:Array ( [0] => 1 [1] => 2 )
2:yes
arr:Array ( [0] => 1 [1] => 2 )
1:no
ps:刚学php,还请大家指教。
答
你的问题在于对array_search的理解不正确,如果查询存在,它返回的是序号,而不是true或false。因为你查询的刚好是第一位的,所以返回0, 转换成布尔值的时候,就变成false了。如果需要判断值在不在数组中,使用in_array() - 检查数组中是否存在某个值,如果需要判断key,使用array_key_exists() - 检查给定的键名或索引是否存在于数组中
参考array_search
array_search — 在数组中搜索给定的值,如果成功则返回相应的键名
关于global,参考变量范围
在函数中声明了全局变量 $a 和 $b 之后,对任一变量的所有引用都会指向其全局版本。对于一个函数能够声明的全局变量的最大个数,PHP 没有限制。
答
谢谢!我太粗心了 回答的太仔细了~