Php 当字符串位于数组中时,为什么ArrayMap返回False

Php 当字符串位于数组中时,为什么ArrayMap返回False,php,arrays,Php,Arrays,我无法理解为什么函数对输入“Dash”返回false,当测试时,数组中的其他每一个值都将返回true $Valid_Links=array("Dash","Profile","Messages","Friends","Blogs","Galleries","Calendar","Settings","Logout"); //function for handling $_GET['content'] variables (uri) function mainHandler(){

我无法理解为什么函数对输入“Dash”返回false,当测试时,数组中的其他每一个值都将返回true

$Valid_Links=array("Dash","Profile","Messages","Friends","Blogs","Galleries","Calendar","Settings","Logout");
//function for handling $_GET['content'] variables (uri)
    function mainHandler(){
        echo '<SECTION id="content_wrapper">';
        global $Valid_Links;
        if(isset($_GET['content'])){
            if(array_search(strtolower($_GET['content']), array_map('strtolower', $Valid_Links))){
                $doc=strtolower($_GET['content']);
                require "main/$doc.php";
            }else{echo 'false';}
        }
        else{
            if(checkLogin()){
                require 'main/dash.php';
            }
            else{
                require 'main/signup.php';
            }
        }
        echo '</SECTION>';
    }
$Valid_Links=数组(“破折号”、“个人资料”、“消息”、“朋友”、“博客”、“画廊”、“日历”、“设置”、“注销”);
//用于处理$\u GET['content']变量(uri)的函数
函数mainHandler(){
回声';
全球$有效链接;
如果(isset($\u GET['content'])){
if(数组搜索(strtolower($\u GET['content'])、数组映射('strtolower',$Valid\u Links))){
$doc=strtolower($_GET['content']);
需要“main/$doc.php”;
}else{echo'false';}
}
否则{
if(checkLogin()){
需要“main/dash.php”;
}
否则{
需要“main/signup.php”;
}
}
回声';
}

因为
array\u search
返回您找到的元素的位置,在本例中该元素为
0
(第一个元素),但是
0
在放入if语句时计算结果为FALSE

解决方案:

添加
!==FALSE
适用于您的情况:

if(array\u search(strtolower($\u GET['content'])、array\u map('strtolower',$Valid\u Links))!==FALSE){

更新

正如@VolkerK所提到的,如果你努力实现最佳实践,你可以在if语句中把FALSE放在前面。这将允许你缓解意外分配变量而不是比较变量的问题:


if(FALSE!==array\u search(strtolower($\u GET['content')),array\u map($strtolower',$Valid\u Links)){

也就是说,你想要
if(FALSE!==array\u search(strtolower($\u GET['content']),…
或者像沃克提到的那样——把布尔放在前面的做法不错“把布尔放在前面的做法不错”——这是YodaCode。“如果它坏了,你必须修复它”;-)当你说它的时候感觉很奇怪,但是把常量(非左值)放在左边,如果你忘记了
中的第二个=如果(0=$x)
。编译器/错误消息本身对我来说是有说服力的。但是(这纯粹是一个观点)比较通常有简单和复杂的一面,我喜欢简单的一面是第一个读的,所以你知道比较是关于什么的。