2013-05-22 2 views
0

Это на самом деле WordPress, но я думаю, что это больше вопрос PHP.Нужна помощь Преобразование Boolean

Я использую структуру SMOF (это настройка параметров темы) и flexslider. Чтобы объединить их, в одном из вариантов flexslider, я должен использовать «true» или «false». Дело в том, что SMOF возвращает «0» и «1» вместо «true» или «false» - слово. Поэтому мне нужно, чтобы преобразовать "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:" "' Спасибо еще раз :) – 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 isBoolean($slider_loop); ?>" 

с

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

Если эхо true вместо "true", он будет выводит 1 и ничего упаковывают false.

+0

Спасибо Nauphal, очень быстрый ответ! (до 1 минуты, если я вижу время правильно lol) К сожалению, это не сработает, но опять же, спасибо, я ценю это :) – Mario88

1

Я не уверен, что полностью понимаю вопрос. Вы говорите, что ОВС возвращает «0» и «1», но вы делаете чек, как это:

if($slider_loop === "true") 

хорошо, первый «истинный» не то же самое, как истинного. Один - это строка, другая - логическая.

Я думаю, что я хотел бы сделать это следующим образом:

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

также обратите внимание, что echo'ing true и false не даст результата;) – EaterOfCode

+0

Кроме того, имя функции 'isBoolean' очень вводит в заблуждение. – 1615903

+0

Спасибо, ребята, я все еще учусь и да, у меня есть/сомневаюсь в тройном «=» и двойном. Экспериментирование (читайте: часто меняем код: P). Это не работает, но спасибо за уроки :) – Mario88

0

1 и '1' уже truthy и 0 и '0' уже falsy, так что вы можете использовать их непосредственно в вашем если заявления. Read more about PHP Booleans.

Если вам нужно отобразить строку на основе bool, т. Е., 'true' или 'false', можно упростить с ternary operator:

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

В вашем случае:

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

Не работает Jamie .. анимация: "", // work , но не boolean animationLoop: "" // не работает // animationLoop: " «работайте, я прокомментировал это, чтобы попробовать Я искал поиск/поиск swers (найдено 2 на этом сайте - почти те же ответы, что и у вас), и из моих ограниченных знаний и опыта я также думаю, что он должен работать, но почему-то это не так. – Mario88

+0

Если вы действительно получаете либо '1',' '1'', '0', либо' '0'', и хотите вывести либо' 'true'', либо' 'false'', я не вижу как это не сработает. [Это демо] (http://codepad.org/HIE9v6sR) проверяет такие значения. Таким образом, я думаю, мы смотрим, как сказал Смасси, проблема XY. –