Dize boolean php dönüştürmek için nasıl


318

Dizeyi nasıl dönüştürebilirim boolean?

$string = 'false';

$test_mode_mail = settype($string, 'boolean');

var_dump($test_mode_mail);

if($test_mode_mail) echo 'test mode is on.';

geri döner,

boolean true

ama olmalı boolean false.


Neden $ bool = !! $ string1 hakkında herhangi bir cevap?
zloctb

1
@zloctb çünkü soruyu cevaplamıyor. !!$string1en yüksek puan alan cevapta belirtilen dizenin boole göstergesini döndürür.
David Barker

Yanıtlar:


347

PHP tarafından "boş" olarak kabul edilen bir değere sahip olmadıkları sürece dizeler her zaman boolean true olarak değerlendirilir (için dokümantasyondan alınmıştırempty ):

  1. "" (boş bir dize);
  2. "0" (Dize olarak 0)

Bir dizenin metin değerine göre bir boole ayarlamanız gerekirse, o değerin varlığını veya başka bir şekilde olup olmadığını kontrol etmeniz gerekir.

$test_mode_mail = $string === 'true'? true: false;

DÜZENLEME: yukarıdaki kod anlaşılması için tasarlanmıştır. Gerçek kullanımda aşağıdaki kod daha uygun olabilir:

$test_mode_mail = ($string === 'true');

ya da belki filter_varfonksiyonun kullanımı daha fazla boolean değeri kapsayabilir:

filter_var($string, FILTER_VALIDATE_BOOLEAN);

filter_vartruthy değerler de dahil olmak üzere değerler bir dizi kapsar "true", "1", "yes"ve "on". Daha fazla ayrıntı için buraya bakın.


5
Ne yaptığınızdan emin değilseniz, her zaman sıkı bir karşılaştırma kullanmanızı öneririm:$string === 'true'
Znarkus

248
Bunu buldum - filter_var($string, FILTER_VALIDATE_BOOLEAN);iyi bir şey mi?
laukok

10
Üçlü gerekli görünmüyor. Neden sadece $ test_mode_mail eşitsizliğinin değerine ayarlanmıyor? $ test_mode_mail = $ string === 'true'
Tim Banks

3
Peki ya 1/0, DOĞRU / YANLIŞ? Bence @lauthiamkok'un cevabı en iyisi.
ryabenko-pro

1
@FelipeTadeo PHP'nin boole işlemleri ile ilgili dizeleri nasıl değerlendirdiğinden bahsediyorum, eval () 'den hiç bahsetmedim ve hiçbir koşulda kullanmayı asla önermem. "(3 <5)" dizgisi PHP tarafından boolean true olarak değerlendirilir çünkü boş değildir.
GordonM

647

Bu yöntem @lauthiamkok tarafından yorumlarda yayınlanmıştır. Daha fazla dikkat çekmek için buraya bir cevap olarak gönderiyorum.

İhtiyaçlarınıza bağlı olarak filter_var(), FILTER_VALIDATE_BOOLEANbayrakla kullanmayı düşünmelisiniz .

filter_var(    true, FILTER_VALIDATE_BOOLEAN); // true
filter_var(    'true', FILTER_VALIDATE_BOOLEAN); // true
filter_var(         1, FILTER_VALIDATE_BOOLEAN); // true
filter_var(       '1', FILTER_VALIDATE_BOOLEAN); // true
filter_var(      'on', FILTER_VALIDATE_BOOLEAN); // true
filter_var(     'yes', FILTER_VALIDATE_BOOLEAN); // true

filter_var(   false, FILTER_VALIDATE_BOOLEAN); // false
filter_var(   'false', FILTER_VALIDATE_BOOLEAN); // false
filter_var(         0, FILTER_VALIDATE_BOOLEAN); // false
filter_var(       '0', FILTER_VALIDATE_BOOLEAN); // false
filter_var(     'off', FILTER_VALIDATE_BOOLEAN); // false
filter_var(      'no', FILTER_VALIDATE_BOOLEAN); // false
filter_var('asdfasdf', FILTER_VALIDATE_BOOLEAN); // false
filter_var(        '', FILTER_VALIDATE_BOOLEAN); // false
filter_var(      null, FILTER_VALIDATE_BOOLEAN); // false

5
Belgelere göre, bu işlev PHP 5> = 5.2.0 için kullanılabilir. php.net/manual/tr/function.filter-var.php
Westy92

4
Gerçekten doğru, yanlış, açık, 0, vb.
AndyWarren

11
filter_var($answer, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)benim için daha iyi çalıştı. Bkz. Php.net/manual/tr/function.filter-var.php#121263
Ryan

!! Önemli Not !! filtre başarısız olursa filter_var da FALSE değerini döndürür. Bu bazı sorunlar yaratabilir.
AFA Med

35

String "false" aslında "TRUE"PHP tarafından bir değer olarak kabul edilir . Belgeler diyor ki:

Bir değeri açıkça boole'ye dönüştürmek için (bool) veya (boolean) dökümlerini kullanın. Bununla birlikte, çoğu durumda döküm gereksizdir, çünkü bir operatör, fonksiyon veya kontrol yapısı bir boole argümanı gerektiriyorsa bir değer otomatik olarak dönüştürülecektir.

Ayrıca bkz. Tip Hokkabazlık.

Boole'ye dönüştürürken, aşağıdaki değerler YANLIŞ olarak kabul edilir:

  • boole FALSE'in kendisi

  • 0 (sıfır) tamsayısı

  • şamandıra 0.0 (sıfır)

  • boş dize ve "0" dizesi

  • sıfır elemanlı bir dizi

  • sıfır üye değişkenli bir nesne (sadece PHP 4)

  • özel tip NULL (ayarlanmamış değişkenler dahil)

  • Boş etiketlerden oluşturulan SimpleXML nesneleri

Diğer her değer DOĞRU olarak kabul edilir (herhangi bir kaynak dahil).

yani eğer yaparsanız:

$bool = (boolean)"False";

veya

$test = "false";
$bool = settype($test, 'boolean');

her iki durumda $boolda olacak TRUE. GordonM'nin önerdiği gibi, bunu manuel olarak yapmanız gerekiyor.


1
Euhm, tabii ki daha düşük olan yanlış döndürür. Aslında, ölümcül bir hata atar :) "Önemli hata: Sadece değişkenler referans ile geçirilebilir". $ a = 'Yanlış'; settype ($ a, 'boolean'); var_dump ($ a); gerçekten yanlış döndürür.
Rob

16

JSON ile çalışırken, üzerinden bir Boolean değeri göndermek zorunda kaldım $_POST. Ben benzer bir sorun yaşadım gibi bir şey vardı:

if ( $_POST['myVar'] == true) {
    // do stuff;
}

Yukarıdaki kodda, Boolean'ım bir JSON dizesine dönüştürüldü.

Bunun üstesinden gelmek için dizeyi şu şekilde çözebilirsiniz json_decode():

//assume that : $_POST['myVar'] = 'true';
 if( json_decode('true') == true ) { //do your stuff; }

(Bu normalde dizeye dönüştürülen ve sunucuya JSON kullanmak dışında başka yollarla gönderilen Boole değerleriyle çalışmalıdır.)


11

bu boole kodunu çözmek için json_decode kullanabilirsiniz

$string = 'false';
$boolean = json_decode($string);
if($boolean) {
  // Do something
} else {
  //Do something else
}

Verilen dize bir tamsayı ise json_decode da tamsayıya dönüşür
Mihai Răducanu

1
Evet, bu doğru, ama dize boole değeri
tuttuğunu belirtti

8
(boolean)json_decode(strtolower($string))

Tüm olası varyantlarını işler $string

'true'  => true
'True'  => true
'1'     => true
'false' => false
'False' => false
'0'     => false
'foo'   => false
''      => false

Ne hakkında onve off?
Cyclonecode 21:18

7

"Boolean" değişkeniniz $ _POST ve $ _GET gibi genel bir diziden geliyorsa, filter_input()filtre işlevini kullanabilirsiniz .

POST örneği:

$isSleeping  = filter_input(INPUT_POST, 'is_sleeping',  FILTER_VALIDATE_BOOLEAN);

"Boolean" değişkeniniz başka bir kaynaktan geliyorsa, filter_var()filtre işlevini kullanabilirsiniz .

Misal:

filter_var('true', FILTER_VALIDATE_BOOLEAN); // true

7

Kullanabilirsiniz boolval($strValue)

Örnekler:

<?php
echo '0:        '.(boolval(0) ? 'true' : 'false')."\n";
echo '42:       '.(boolval(42) ? 'true' : 'false')."\n";
echo '0.0:      '.(boolval(0.0) ? 'true' : 'false')."\n";
echo '4.2:      '.(boolval(4.2) ? 'true' : 'false')."\n";
echo '"":       '.(boolval("") ? 'true' : 'false')."\n";
echo '"string": '.(boolval("string") ? 'true' : 'false')."\n";
echo '"0":      '.(boolval("0") ? 'true' : 'false')."\n";
echo '"1":      '.(boolval("1") ? 'true' : 'false')."\n";
echo '[1, 2]:   '.(boolval([1, 2]) ? 'true' : 'false')."\n";
echo '[]:       '.(boolval([]) ? 'true' : 'false')."\n";
echo 'stdClass: '.(boolval(new stdClass) ? 'true' : 'false')."\n";
?>

Belgeler http://php.net/manual/es/function.boolval.php


2
echo boolval('false');=> 1
Mubashar

Kullanabilirsiniz echo (int)'false;veyaecho intval('false');
anayarojo

@anayarojo (int)'true've intval('true')her ikisi de 0 döndürür (tüm dizeler yapar)
sketchyTech

4

yapılacak en kolay şey şudur:

$str = 'TRUE';

$boolean = strtolower($str) == 'true' ? true : false;

var_dump($boolean);

Bu şekilde bir dizi 'true', 'TRUE', 'false' veya 'FALSE' arasında döngü yapabilir ve dize değerini bir boole değerine alabilirsiniz.


3

Diğer cevaplar karmaşık şeyler üzerindedir. Bu soru basitçe mantıksal bir sorudur. İfadenizi doğru yapın.

$boolString = 'false';
$result = 'true' === $boolString;

Şimdi cevabınız ya

  • false, dize olsaydı 'false',
  • veya truedizeniz öyleyse 'true'.

Eğer takma ad gibi dizeleri gerekiyorsa filter_var( $boolString, FILTER_VALIDATE_BOOLEAN );yine de daha iyi bir seçenek olacağını unutmayın .on/yes/1true


3
function stringToBool($string){
    return ( mb_strtoupper( trim( $string)) === mb_strtoupper ("true")) ? TRUE : FALSE;
}

veya

function stringToBool($string) {
    return filter_var($string, FILTER_VALIDATE_BOOLEAN);
}

3
filter_var($string, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE);

$string = 1; // true
$string ='1'; // true
$string = 'true'; // true
$string = 'trUe'; // true
$string = 'TRUE'; // true
$string = 0; // false
$string = '0'; // false
$string = 'false'; // false
$string = 'False'; // false
$string = 'FALSE'; // false
$string = 'sgffgfdg'; // null

Belirtmelisin

FILTER_NULL_ON_FAILURE
aksi halde $ string başka bir şey içeriyor olsa bile her zaman false olur.


2

Settype yöntemini de kullanabilirsiniz!

SetType ($ var, "Boolean") Echo $ var // bkz. 0 veya 1


2

Ben boole FALSE "false" dizesinin her durumda duyarsız sürümünü döküm olacak şekilde yapmak, ancak diğer tüm dizeleri için normal php döküm kuralları kullanarak davranacaktır. Bence bu beklenmedik davranışları önlemenin en iyi yolu.

$test_var = 'False';
$test_var = strtolower(trim($test_var)) == 'false' ? FALSE : $test_var;
$result = (boolean) $test_var;

Veya bir işlev olarak:

function safeBool($test_var){
    $test_var = strtolower(trim($test_var)) == 'false' ? FALSE : $test_var;
    return (boolean) $test_var;
}

2

@GordonM'in cevabı iyi. Ancak $string, zaten true(yani, dize bir dize değil boole TRUE ise) başarısız olur .

Cevabını uzatmak için şunu kullanırdım:

$test_mode_mail = ($string === 'true' OR $string === true));

0

Wordpress kısa kod özellikleriyle karışıyordum, tüm olasılıkları ele almak için özel bir işlev yazmaya karar verdim. belki birisi için yararlıdır:

function stringToBool($str){
    if($str === 'true' || $str === 'TRUE' || $str === 'True' || $str === 'on' || $str === 'On' || $str === 'ON'){
        $str = true;
    }else{
        $str = false;
    }
    return $str;
}
stringToBool($atts['onOrNot']);

1
İlk etapta yardım arıyordum, ama umduğum kadar kolay bir şey bulamadım. bu yüzden kendi fonksiyonumu yazdım. kullanmaktan çekinmeyin.
tomi

-1

Basit bir yol, doğru olduğunu düşündüğünüz bir değer dizisini kontrol etmektir.

$wannabebool = "false";
$isTrue = ["true",1,"yes","ok","wahr"];
$bool = in_array(strtolower($wannabebool),$isTrue);

-1

Burada belirtilmeyen bir olasılığı göstermek için düzenlendi, çünkü orijinal cevabım OP'nin sorusuyla ilgili olmaktan çok uzaktı.

preg_match (); Kullanmak mümkündür. Bununla birlikte, çoğu uygulamada, buradaki diğer cevaplara göre kullanımı çok daha ağır olacaktır.

if (preg_match("/true/i", "true PHP is a web scripting language of choice.")) {
    echo "<br><br>Returned true";
} else {
    echo "<br><br>Returned False";
}

/(?:true)|(?:1)/iBazı durumlarda gerektiğinde de kullanılabilir. Hem "false" hem de "1" içeren bir dizeyi değerlendirdiğinde doğru döndürülmez.


İstenen bu değil. Soru, bir dizenin boole'ye nasıl dönüştürüleceğidir.
mrded

mrded: Özür dilediğim soruyu yanlış okudum. Yani ruh iyi formda burada belirtilmeyen başka bir olasılık ekleyeceğim.
JSG

-1

PHP'de, çift ​​değil işleci ( !!) kullanarak bir değeri bir boole değerine dönüştürebilirsiniz :

var_dump(!! true);     // true
var_dump(!! "Hello");  // true
var_dump(!! 1);        // true
var_dump(!! [1, 2]);   // true
var_dump(!! false);    // false
var_dump(!! null);     // false
var_dump(!! []);       // false
var_dump(!! 0);        // false
var_dump(!! '');       // false

-4

(Bool) kullanarak bir boole dökümünü yapabilmeniz gerekir, ancak bunun "true" ve "false" dizelerinde çalışıp çalışmadığını kontrol etmeden emin değilim.

Bu bir pop değerinde olabilir

$myBool = (bool)"False"; 

if ($myBool) {
    //do something
}

Aşağıdakilerin içine konulduğunda boole False'ye değerlendireceğini bilmek önemlidir.

if()
  • boole FALSE'in kendisi
  • 0 (sıfır) tamsayısı
  • şamandıra 0.0 (sıfır)
  • boş dize ve "0" dizesi
  • sıfır elemanlı bir dizi
  • sıfır üye değişkenli bir nesne (sadece PHP 4)
  • özel tip NULL (ayarlanmamış değişkenler dahil)
  • Boş etiketlerden oluşturulan SimpleXML nesneleri

Başka her şey doğru olarak değerlendirilecektir.

Burada açıklandığı gibi: http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting


6
İlk paragrafta tahmin cevaben: dönüştürür mantıksala açık döküm kullanarak "false"için true.
Mark Amery

2
Bu "doğru" yazdıracak$myBool = (bool)"False"; if ($myBool) { echo "true"; }
SSH Bu

2
Bu yanlıştır, "" veya "0" içermedikçe dizeler true olarak değerlendirilir.
Michael J.Calkins
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.