2013-05-22 107 views
0

这实际上是WordPress,但我认为这是更多的PHP问题。需要帮助转换布尔

我使用SMOF框架(它是为主题选项设置)和flexslider。要结合他们,在flexslider选项之一中,我必须使用“真”还是“假”。事情是,SMOF返回“0”和“1”而不是“真”或“假” - 这个词。所以,我需要转换成 “0” 到 “假” 和 “1” 到 “真”

我有这样的代码:

function isBoolean($slider_loop) { 
    $slider_loop = $smof_data['slider_loop']; 
    if ($slider_loop === "true") { 
     return true; 
    } else { 
     return false; 
    } 
    return $slider_loop; 
} 

...,然后在flexslider的 “方”:

animationLoop: "<?php echo isBoolean($slider_loop); ?>" 

但它不工作。

理想的情况下,它应该是这样的:

animationLoop: "<?php echo $smof_data['slider_loop'] 
// this return "0" and "1", while it should be "true" or "false" for flexslider to work ?>" 

所以,我应该怎么办呢?

在此先感谢。

+2

'json_encode'有利于改变PHP结构中的JavaScript构建。 – Wrikken

+0

感谢Wrikken,我可能需要稍后使用它。 – Mario88

+0

为什么以后?为什么不''echo json_encode($ whateveryourreturnis);',它会尽职尽责地做出'true'或'false',如果那是什么变量是... – Wrikken

回答

0

你怎么样利用动态类型和类型转换的?它是那样简单:

return (bool)$smof_data['slider_loop']; 

..

+0

非常感谢你!我尝试使用类型转换,但我认为我错误地应用了它。原来这很简单。 我评论了上述功能,并直接在flexslider的一面直接使用它,它的工作原理。 'animationLoop:“<?php echo(bool)$ smof_data ['slider_loop'];?>”' 再次感谢:) – Mario88

+0

注意:这不会输出“true”或“false”作为你想要的,但是'1'或什么也不是。请参阅http://codepad.org/gbkzXsnE –

+1

如果它是实际的字符串,而不是布尔值,则将其包含在var_export中。('false'===($ boolean_represented_as_string = var_export((bool)0,true) )&&('true'===($ boolean_represented_as_string = var_export((bool)1,true))...这就是说,我相信OP只是有一个XY问题的案例(http://meta.stackexchange .com/questions/66377/what-is-the-xy-problem) – smassey

2

animationLoop: "<?php echo ($slider_loop == 1) ? 'true' : 'false'; ?>" 

更换

animationLoop: "<?php echo isBoolean($slider_loop); ?>" 

如果您回应true而不是"true",它将输出1并没有什么柜面的false

+0

感谢Nauphal,非常快的回复! (不到1分钟,如果我看到时间正确大声笑)不幸的是,它不工作,但再次,谢谢你,我欣赏它:) – Mario88

1

我不确定我完全理解了这个问题。 你说SMOF返回“0”和“1”,但你做的检查是这样的:

if($slider_loop === "true") 

好,第一“真”是不一样的真正。一个是字符串,另一个是布尔值。

我想我会做这样的:

$slider_loop = (int)$smof_data['slider_loop']; 
    if ($slider_loop) { 
     return true; 
    } else { 
     return false; 
    } 
+0

也注意,echo'ing真假不会给结果;) – EaterOfCode

+0

另外,函数名称isBoolean在这里非常具有误导性。 – 1615903

+0

谢谢大家,我还在学习,是的,我对三重“=”和双倍有疑问。试验(阅读:更改代码很多:P)。它不工作,但感谢您的教训:) – Mario88

0

1'1'已经truthy,并0'0'已经falsy,这样你就可以在你的if语句直接使用它们。 Read more about PHP Booleans

如果您需要根据bool回显一个字符串,即,'true''false',您可以用ternary operator简化:

echo $value ? 'true' : 'false'; 

你的情况:

echo $smof_data['slider_loop'] ? 'true' : 'false'; 
+0

它不工作Jamie .. animation:“<?php echo $ smof_data ['slider_animation'];?>”,// work ,但不是boolean animationLoop:“<?php echo $ smof_data ['slider_loop']?'true':'false';?>”//不工作 // animationLoop:“<?php echo(bool) $ smof_data ['slider_loop'];?>“工作,我评论它尝试 我一直在谷歌搜索/寻找swers(在这个网站上找到2个 - 与你的答案几乎相同),并且从我有限的知识和经验中我也认为它应该起作用,但不知何故它不会。 – Mario88

+0

如果你确实收到了'1','1'','0'或者''0'',并且希望输出“true”或者“false”,我看不到它如何不起作用。 [此演示](http://codepad.org/HIE9v6sR)测试这些值。就像这样,我想我们正在看,正如smassey所说的,一个XY问题。 –