स्ट्रिंग को बूलियन php में कैसे बदलें


318

मैं स्ट्रिंग को कैसे बदल सकता हूं boolean?

$string = 'false';

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

var_dump($test_mode_mail);

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

यह लौटा,

बूलियन सच

लेकिन यह होना चाहिए boolean false


$ Bool = !! $ string1 के बारे में किसी ने क्यों उत्तर दिया?
zloctb

1
@zloctb क्योंकि यह प्रश्न का उत्तर नहीं देता है। !!$string1शीर्ष रेटेड उत्तर में उल्लिखित स्ट्रिंग का एक बूलियन सूचक लौटाएगा।
डेविड बार्कर

जवाबों:


347

स्ट्रिंग्स हमेशा बूलियन सच का मूल्यांकन करते हैं जब तक कि उनके पास पीएचपी द्वारा "खाली" माना जाने वाला मूल्य न हो (इसके लिए प्रलेखनempty से लिया गया ):

  1. "" (एक खाली स्ट्रिंग);
  2. "0" (एक स्ट्रिंग के रूप में)

यदि आपको एक स्ट्रिंग के पाठ मूल्य के आधार पर एक बूलियन सेट करने की आवश्यकता है, तो आपको उस मूल्य की उपस्थिति या अन्यथा की जांच करने की आवश्यकता होगी।

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

संपादित करें: उपरोक्त कोड समझ की स्पष्टता के लिए अभिप्रेत है। वास्तविक उपयोग में निम्नलिखित कोड अधिक उपयुक्त हो सकते हैं:

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

या हो सकता है कि filter_varफ़ंक्शन का उपयोग अधिक बूलियन मानों को कवर करे:

filter_var($string, FILTER_VALIDATE_BOOLEAN);

filter_varमूल्यों की एक पूरी श्रृंखला, truthy मान सहित शामिल किया गया है "true", "1", "yes"और "on"। अधिक जानकारी के लिए यहां देखें ।


5
मैं हमेशा सख्त तुलना का उपयोग करने की सलाह देता हूं, यदि आप सुनिश्चित नहीं हैं कि आप क्या कर रहे हैं:$string === 'true'
16

248
मैंने यह पाया - filter_var($string, FILTER_VALIDATE_BOOLEAN);क्या यह अच्छी बात है?
laukok

10
टर्नरी आवश्यक नहीं लगता है। असमानता के मूल्य के लिए सिर्फ $ test_mode_mail क्यों सेट नहीं किया? $ test_mode_mail = $ string === 'true'
टिम बैंक्स

3
लेकिन 1/0, TRUE / FALSE का क्या? मुझे लगता है कि @lauthiamkok का जवाब सबसे अच्छा है।
रायबेंको-प्रो

1
@FelipeTadeo मैं बात कर रहा हूँ कि कैसे PHP बूलियन ऑपरेशन के संबंध में तार का मूल्यांकन करता है, मैंने कभी भी eval () का उल्लेख नहीं किया है और मैं इसे किसी भी परिस्थिति में उपयोग करने की अनुशंसा नहीं करूँगा। स्ट्रिंग "(3 <5)" का मूल्यांकन PHP द्वारा बूलियन सच के रूप में किया जाएगा क्योंकि यह खाली नहीं है।
गॉर्डन

647

इस विधि को टिप्पणियों में @lauthiamkok द्वारा पोस्ट किया गया था। मैं इसे और अधिक ध्यान देने के लिए एक उत्तर के रूप में यहां पोस्ट कर रहा हूं।

अपनी आवश्यकताओं के आधार पर, आपको ध्वज के filter_var()साथ उपयोग करने पर विचार करना चाहिए FILTER_VALIDATE_BOOLEAN

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
प्रलेखन के अनुसार, यह फ़ंक्शन PHP 5> = 5.2.0 के लिए उपलब्ध है। php.net/manual/en/function.filter-var.php
वेस्टीऑन

4
मैं वास्तव में वर्डप्रेस शोर्ट विशेषताओं के आधार पर बूलियन स्थापित करने के लिए इस समाधान को पसंद करता हूं जिसमें सही, गलत, 0, आदि जैसे मूल्य हैं। महान जवाब, निश्चित रूप से स्वीकृत उत्तर होना चाहिए।
एंडीवरन

11
filter_var($answer, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)मेरे लिए और भी बेहतर काम किया। देखें php.net/manual/en/function.filter-var.php#121263
रयान

!! महत्वपूर्ण लेख !! यदि फ़िल्टर विफल रहता है तो फ़िल्टर_वर भी FALSE करता है। इससे कुछ समस्याएं पैदा हो सकती हैं।
AFA मेड

35

स्ट्रिंग "false" वास्तव "TRUE"में PHP द्वारा एक मूल्य माना जाता है । प्रलेखन कहता है:

मूल्य को बूलियन में स्पष्ट रूप से परिवर्तित करने के लिए, (बूल) या (बूलियन) कास्ट का उपयोग करें। हालांकि, ज्यादातर मामलों में कलाकार अनावश्यक है, क्योंकि एक ऑपरेटर, फ़ंक्शन या नियंत्रण संरचना को बूलियन तर्क की आवश्यकता होने पर एक मूल्य स्वचालित रूप से परिवर्तित हो जाएगा।

टाइप जुगाड़िंग भी देखें।

बूलियन में परिवर्तित करते समय, निम्न मानों को FALSE माना जाता है:

  • बूलियन FALSE ही

  • पूर्णांक 0 (शून्य)

  • फ्लोट 0.0 (शून्य)

  • खाली स्ट्रिंग, और स्ट्रिंग "0"

  • शून्य तत्वों के साथ एक सरणी

  • शून्य सदस्य चर के साथ एक वस्तु (केवल PHP 4)

  • विशेष प्रकार NULL (परेशान चर सहित)

  • खाली टैग से बनाई गई SimpleXML ऑब्जेक्ट

हर दूसरे मूल्य को TRUE माना जाता है (किसी भी संसाधन सहित)।

तो अगर तुम करते हो:

$bool = (boolean)"False";

या

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

दोनों ही मामलों में $boolहो जाएगा TRUE। तो आपको इसे मैन्युअल रूप से करना होगा, जैसे गॉर्डन सुझाव देता है।


1
एहम, निचले हिस्से को झुठलाता है। वास्तव में, यह एक घातक :) "घातक त्रुटि: केवल चर को संदर्भ द्वारा पारित किया जा सकता है" फेंकता है। $ a = 'मिथ्या'; settype ($ एक, 'बूलियन'); var_dump ($ एक); वास्तव में झूठे लौटेंगे।
रोब

16

JSON के साथ काम करते समय, मुझे एक बूलियन मान भेजना पड़ा $_POST। जब मैंने कुछ ऐसा किया तो मुझे भी ऐसी ही समस्या हुई:

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

ऊपर दिए गए कोड में, मेरी बूलियन को JSON स्ट्रिंग में बदल दिया गया था।

इसे दूर करने के लिए, आप स्ट्रिंग का उपयोग करके डीकोड कर सकते हैं json_decode():

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

(यह आमतौर पर बूलियन मानों को स्ट्रिंग में परिवर्तित करने और सर्वर पर भेजे जाने के साथ-साथ यूएनईएन का उपयोग करने के अलावा अन्य तरीकों से भी काम करना चाहिए।)


11

आप उस बूलियन को डीकोड करने के लिए json_decode का उपयोग कर सकते हैं

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

json_decode भी पूर्णांक में बदल जाएगा यदि दी गई स्ट्रिंग पूर्णांक है
Mihai Răducanu

1
हां, यह सच है, लेकिन इसका उल्लेख है कि स्ट्रिंग बूलियन मूल्य धारण कर रहा है
souparno majumder

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

यह सभी संभावित वेरिएंट को संभालता है $string

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

के बारे में onऔर क्या off?
साइक्लोनोस्कोप

7

यदि आपका "बूलियन" वैरिएबल वैश्विक सरणी जैसे $ _POST और $ _GET से आता है, तो आप filter_input()फ़िल्टर फ़ंक्शन का उपयोग कर सकते हैं ।

POST के लिए उदाहरण:

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

यदि आपका "बूलियन" चर दूसरे स्रोत से आता है, तो आप filter_var()फ़िल्टर फ़ंक्शन का उपयोग कर सकते हैं ।

उदाहरण:

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

7

आप उपयोग कर सकते हैं boolval($strValue)

उदाहरण:

<?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";
?>

प्रलेखन http://php.net/manual/es/function.boolval.php


2
echo boolval('false');=> 1
मुबाशर

आप उपयोग कर सकते हैं echo (int)'false;याecho intval('false');
aayarojo

@anayarojo (int)'true'और intval('true')दोनों 0 के रूप में अच्छी तरह से (सभी तार करते हैं)
स्केचटेक

4

सबसे आसान काम यह है:

$str = 'TRUE';

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

var_dump($boolean);

इसे इस तरह से करते हुए, आप 'सही', 'ट्रू', 'गलत' या 'FALSE' की श्रृंखला के माध्यम से लूप कर सकते हैं और बूलियन को स्ट्रिंग मान प्राप्त कर सकते हैं।


3

अन्य जवाब जटिल चीजों पर हैं। यह सवाल केवल तर्क सवाल है। बस अपना बयान सही पाएं।

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

अब आपका जवाब होगा या तो

  • false, अगर स्ट्रिंग थी 'false',
  • या true, यदि आपका तार था 'true'

मुझे यह ध्यान रखना filter_var( $boolString, FILTER_VALIDATE_BOOLEAN );होगा कि यदि आप के on/yes/1लिए उपनाम की तरह तार की आवश्यकता है, तब भी एक बेहतर विकल्प होगाtrue


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

या

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

आपको निर्दिष्ट करना होगा

FILTER_NULL_ON_FAILURE
अन्यथा आप हमेशा गलत होंगे भले ही $ स्ट्रिंग में कुछ और हो।


2

आप सेपाइप विधि का भी उपयोग कर सकते हैं!

सेटटाइप ($ var, "बूलियन") Echo $ var // देखें 0 या 1


2

मैं इसे ऐसे तरीके से करता हूं जो किसी भी मामले को बूलियन FALSE "स्ट्रिंग" के असंवेदनशील संस्करण में डाल देगा, लेकिन अन्य सभी तारों के लिए सामान्य php कास्टिंग नियमों का उपयोग करके व्यवहार करेगा। मुझे लगता है कि यह अप्रत्याशित व्यवहार को रोकने का सबसे अच्छा तरीका है।

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

या एक समारोह के रूप में:

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

2

@GordonM द्वारा उत्तर अच्छा है। लेकिन यह $stringपहले से ही असफल हो जाता है true(यानी, स्ट्रिंग एक स्ट्रिंग नहीं है, लेकिन बूलियन TRUE) ... जो अतार्किक लगता है।

उनके जवाब का विस्तार, मैं उपयोग करेंगे:

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

0

मैं वर्डप्रेस शोर्ट विशेषताओं के साथ भ्रमित हो रहा था, मैंने सभी संभावनाओं को संभालने के लिए एक कस्टम फ़ंक्शन लिखने का फैसला किया। शायद यह किसी के लिए उपयोगी है:

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
मैं पहली जगह में मदद की तलाश कर रहा था, लेकिन मुझे उम्मीद के मुताबिक कुछ भी उतना आसान नहीं लगा। इसीलिए मैंने अपना फंक्शन लिखा। इसका इस्तेमाल करने के लिए स्वतंत्र महसूस करें।
शाम

-1

एक सरल तरीका उन मूल्यों की एक सरणी के खिलाफ जांच करना है जिन्हें आप सच मानते हैं।

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

-1

यहाँ उल्लेख नहीं होने की संभावना दिखाने के लिए संपादित किया गया, क्योंकि मेरा मूल उत्तर ओपी के प्रश्न से संबंधित था।

preg_match (); का उपयोग करना संभव है। हालांकि, अधिकांश अनुप्रयोगों में यहां अन्य उत्तरों की तुलना में इसका उपयोग करना अधिक भारी होगा।

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)/iकुछ स्थितियों में जरूरत पड़ने पर इस्तेमाल भी किया जा सकता है। यह सही ढंग से वापस नहीं आएगा जब यह "गलत" और "1" दोनों युक्त स्ट्रिंग का मूल्यांकन करता है।


यह वह नहीं है जो पूछा गया था। सवाल यह है कि स्ट्रिंग को बूलियन में कैसे बदला जाए।
mrded

mrded: मैं माफी माँगता हूँ सवाल गलत है। तो आत्मा अच्छे रूप में मैं यहां उल्लेखित नहीं होने वाली एक और संभावना जोड़ूंगा।
JSG

-1

PHP में आप बस डबल नहीं ऑपरेटर ( !!) का उपयोग करके एक बूलियन के लिए एक मूल्य बदल सकते हैं :

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

आपको एक बूलियन का उपयोग करने में सक्षम होना चाहिए (बूल) लेकिन मुझे यह जांचे बिना यकीन नहीं है कि यह स्ट्रिंग्स "सच" और "असत्य" पर काम करता है या नहीं।

यह हालांकि एक पॉप के लायक हो सकता है

$myBool = (bool)"False"; 

if ($myBool) {
    //do something
}

यह जानने योग्य है कि निम्नलिखित बूलियन झूठी का मूल्यांकन करेगा जब अंदर डाल दिया जाएगा

if()
  • बूलियन FALSE ही
  • पूर्णांक 0 (शून्य)
  • फ्लोट 0.0 (शून्य)
  • खाली स्ट्रिंग, और स्ट्रिंग "0"
  • शून्य तत्वों के साथ एक सरणी
  • शून्य सदस्य चर के साथ एक वस्तु (केवल PHP 4)
  • विशेष प्रकार NULL (परेशान चर सहित)
  • खाली टैग से बनाई गई SimpleXML ऑब्जेक्ट

प्रत्येक अन्य व्यक्ति सत्य का मूल्यांकन करेगा।

जैसा यहाँ वर्णित है: http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting


6
अपने पहले पैराग्राफ में अनुमान के जवाब में: बूलियन के लिए एक स्पष्ट डाली का उपयोग करने में परिवर्तित "false"हो जाएगा true
मार्क अमेरी

2
यह "सच" प्रिंट करेगा$myBool = (bool)"False"; if ($myBool) { echo "true"; }
एसएसएच यह

2
यह गलत है, स्ट्रिंग्स का मूल्यांकन तब तक सही है जब तक कि उनमें "" या "0" न हों।
माइकल जे। कल्किंस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.