【问题标题】:PHP is_array returns "1" on true and breaks on falsePHP is_array 在 true 时返回“1”,在 false 时中断
【发布时间】:2013-08-18 16:45:02
【问题描述】:

我将一个 jQuery 数组传递给 PHP。我的回调函数在它是字符串时返回值,但在发送数组时中断。中断在 PHP 代码中。

我已经测试了以下内容:

$yes = array('this', 'is', 'an array');
echo is_array($yes);

返回“1”。

$yes = "array";
echo is_array($yes); 

这会破坏代码。

为什么我没有返回“true”和“false”?

【问题讨论】:

    标签: php jquery arrays


    【解决方案1】:

    如果您发布的代码是直接来自您的文本编辑器,那么 echo is_array($yes) 末尾缺少分号是导致其中断的原因。

    编辑:只是为了澄清您返回的是真/假,而不是以 1 或 0 的形式。您应该将is_array() 与条件结合使用。

    $yes = 'asdf';
    
    if (is_array($yes)){
        echo 'true';
    } else {
        echo 'false';
    }
    

    返回假

    $yes = array('this', 'is', 'an', 'array');
    
    if (is_array($yes)){
        echo 'true';
    } else {
        echo 'false';
    }
    

    返回真

    【讨论】:

    • 嘿,刚刚看到您的编辑。我最初的实现是在一个合乎逻辑的 if 语句中。它总是返回 false,所以我不得不把它拆开。
    • 代码似乎在其他地方被破坏,关于is_array()的使用,你正在做的事情是正确的
    • 我确定它在这里坏了。注释掉该部分可以缓解任何破损
    【解决方案2】:
    $yes = array('this', 'is', 'an array');
    echo is_array($yes); 
    

    输出 -->1

    因为is_array($yes) 返回true 等价于echo true; 输出1

    $yes = "array";
    echo is_array($yes);//missing semicolon 
    

    输出(无)-->

    因为is_array($yes) 返回false 等价于echo false;,它什么也不输出

    来自Manual

    布尔值 TRUE 转换为字符串“1”。布尔值 FALSE 是 转换为“”(空字符串)。这允许转换回来和 介于布尔值和字符串值之间。

    所以最好写代码

    echo (is_array($yes)) ? 'do something condition is true' : 'do something condition is false';
    

    【讨论】:

    • 就个人而言,我不会说这是三元组的正确用法。我只建议将它用于分配和返回值。如果三元组的 truefalse 表达式与您的情况一样长,我觉得这会导致代码的可读性降低
    【解决方案3】:

    试试这样的:

    echo is_array($yes) ? 'true' : 'false';
    

    如果您想知道为什么需要这样做,也就是说,为什么只做echo is_array($yes) 是不够的,请查看以下示例:http://codepad.org/PcCbvTGe

    如您所见,true 输出为1,而false 不产生任何输出。


    使用if: http://codepad.org/OIOZLqFc 完成的测试

    <?php
    $yes = array("trtr");
    if(is_array($yes)) {
       echo "is an array";
    } else {
       echo "is not";
    }
    

    【讨论】:

    • 所以,如果将它用于我的 if 语句,我应该使用:if (is_array($yes)==1) {//do it}
    • 啊不,如果是这样,那么if(is_array($yes)==true) { ... } else { ... } 应该足够了。
    • @JamesDoeJr。好的,我在if 中添加了一个示例。您可以将该函数中的$yes 替换为字符串并检查结果。
    • 好的。原谅我的天真。我希望这不是一个太愚蠢的问题。我真的很感谢你们所有人的答案。没有比这个更好的网络社区了。
    【解决方案4】:
    $test_array = ( (array)$var === $var )? true : false;
    if( $test_array ) ...
    

    function test_array( $var )
    {
        return (array)$var === $var;
    }
    //...the anywhere else ...
    if( test_array( $my_var) )...
    

    如果您想显示您的数据及其类型,只需使用:

    var_dump( $my_var );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-11
      • 1970-01-01
      • 2014-07-03
      • 1970-01-01
      • 1970-01-01
      • 2019-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多