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


242

मेरे पास एक बूलियन चर है जिसे मैं एक स्ट्रिंग में बदलना चाहता हूं:

$res = true;

मुझे प्रारूप के होने के लिए परिवर्तित मूल्य की आवश्यकता है: "true" "false"नहीं"0" "1"

$converted_res = "true";
$converted_res = "false";

मैंने कोशिश की:

$converted_res = string($res);
$converted_res = String($res);

लेकिन यह मुझे बताता है कि stringऔर Stringमान्यता प्राप्त कार्य नहीं हैं।
मैं इस बूलियन को PHP में "true"या प्रारूप में एक स्ट्रिंग में कैसे बदलूं "false"?


1
नए प्रयोग फ़ंक्शन ((स्ट्रिंग) $ परम [बूलियन प्रकार]) {if ($ परम) {....} क्योंकि (स्ट्रिंग) झूठी => "झूठी" झूठी नहीं है ...
zloctb

जवाबों:


361

सबसे सरल समाधान:

$converted_res = $res ? 'true' : 'false';


1
यह इसे करने का सबसे आसान तरीका है, लेकिन यह इस बात पर निर्भर करता है कि आपको इसके लिए इसकी क्या ज़रूरत है, यह सबसे अच्छा व्यर्थ नहीं हो सकता है।
एंड्री

1
@ डूमस्टोन मुझे पता है कि यह 3 साल हो गया है, लेकिन मैं सिर्फ यह जानना चाहता था कि आपको क्या लगता है कि कुछ मामलों में यह सबसे अच्छा समाधान नहीं है। ?:अंकन सबसे सरलीकृत कोड हमने इस स्थिति में साथ आने के कर सकते हैं।
caiosm1005

1
मेरे लिए उदाहरण के लिए, यह हाथ में मामले के लिए सबसे अच्छा समाधान नहीं है: मुझे यकीन नहीं है कि वापसी मूल्य का प्रकार क्या है; यह बूलियन या कुछ और हो सकता है। (डिबगिंग के दौरान किसी अन्य व्यक्ति द्वारा लिखे गए फ़ंक्शन को कॉल करना।) आपका समाधान बूलियन को $ res को रूपांतरित करता है, जबकि var_export सभी संभव प्रकारों को संभाल सकता है।

13
@ user2443147 बुलियन का प्रकार वस्तुतः प्रश्न में उल्लिखित पहला तथ्य है। यदि आप उस प्रकार के बारे में सुनिश्चित नहीं हैं जिसके साथ आप काम कर रहे हैं, तो आपके पास शुरू करने के लिए समस्याओं का एक पूरा सेट है।
nem75

3
ध्यान दें कि जब आपको टर्नरी ऑपरेटर और स्ट्रिंग संघनन का मिश्रण होता है तो आपको अतिरिक्त कोष्ठक की आवश्यकता होती है। echo '<active>' . $res ? 'true' : 'false' . '</active>';वांछित परिणाम नहीं देता है, echo '<active>' . ($res ? 'true' : 'false') . '</active>';करता है।
सलमान ए

194

फ़ंक्शन var_export एक चर का एक स्ट्रिंग प्रतिनिधित्व लौटाता है, इसलिए आप ऐसा कर सकते हैं:

var_export($res, true);

दूसरा तर्क फ़ंक्शन को प्रतिध्वनि करने के बजाय स्ट्रिंग को वापस करने के लिए कहता है।


एकदम सही जवाब। यह "PHP" एक "... एक चर के एक पार्सबल स्ट्रिंग प्रतिनिधित्व" पाने का तरीका है
पीटरचौला

62

एक और तरीका है: json_encode( booleanValue )

echo json_encode(true);  // string "true"

echo json_encode(false); // string "false"

// null !== false
echo json_encode(null);  // string "null"

6
मुझे लगता है कि ऑपरेशन के इरादे से शब्दशः उपयोग var_export()करना अधिक है (जब तक कि किसी को कुछ जे के लिए तार की आवश्यकता न हो, अर्थात;;
एडम कैमरन

3
यह वास्तव में साइड-इफ़ेक्ट पर निर्भर करता है कि JSON प्रतिनिधित्व वही होता है जो वह चाहता है। यह JSON एक्सटेंशन स्थापित और सक्षम होने पर भी निर्भर करता है, जो बहुत संभव है, लेकिन दिया नहीं है। इसलिए यह एक स्वच्छ समाधान नहीं है।
निक राइस

35

Var_export देखें


3
अधिक विस्तार के लिए ईसाई का जवाब देखें । विशेष रूप से, दूसरा तर्क (सत्य) शामिल करें।
जिमोथी

यह एक "लिंक-ओनली" उत्तर है, जो एक "उत्तर" के लिए SO दिशानिर्देशों की परवाह नहीं करता है। कृपया editअपनी पोस्ट में लिंक से संबंधित जानकारी शामिल करें । जबकि जानकारी उपयोगी है, यह अधिक उपयुक्त रूप से ओपी के लिए "टिप्पणी" के रूप में छोड़ दिया गया है। लिंक से सभी आवश्यक जानकारी उत्तर में एम्बेडेड होनी चाहिए। 1) यदि लिंक अगम्य हो जाते, तो यह पोस्ट बेकार हो जाती। 2) आगंतुकों को बाहरी लिंक पर जाने की आवश्यकता नहीं होनी चाहिए, केवल इसका पता लगाने के लिए। उस ने कहा, प्रलेखन, स्रोतों, या अतिरिक्त जानकारी के लिंक को अत्यधिक प्रोत्साहित किया जाता है। आपके योगदान के लिए धन्यवाद।
शेरिलहोमन

12

PHP में string करने के लिए आप strval () या (string) का उपयोग करते हैं। हालाँकि, यह बूलियन को "सही" या "गलत" की वास्तविक वर्तनी में परिवर्तित नहीं करता है, इसलिए आपको ऐसा स्वयं करना चाहिए। यहाँ एक उदाहरण समारोह है:

function strbool($value)
{
    return $value ? 'true' : 'false';
}
echo strbool(false); // "false"
echo strbool(true); // "true"

यदि $val = true;तब strval($val)और (string) $valदोनों वापस लौटते हैं तो
18:

9

यहां अन्य समाधानों में सभी केवेट हैं (हालांकि वे हाथ में प्रश्न को संबोधित करते हैं)। यदि आप मिश्रित प्रकारों पर (1) लूपिंग कर रहे हैं या (2) एक जेनेरिक सॉल्यूशन चाहते हैं, जिसे आप फंक्शन के रूप में एक्सपोर्ट कर सकते हैं या अपनी उपयोगिताओं में शामिल कर सकते हैं, तो यहां कोई भी अन्य सॉल्यूशन काम नहीं करेगा।

सबसे सरल और सबसे आत्म-व्याख्यात्मक समाधान है:

// simplest, most-readable
if (is_bool($res) {
    $res = $res ? 'true' : 'false';
}

// same as above but written more tersely
$res = is_bool($res) ? ($res ? 'true' : 'false') : $res;

// Terser still, but completely unnecessary  function call and must be
// commented due to poor readability. What is var_export? What is its
// second arg? Why are we exporting stuff?
$res = is_bool($res) ? var_export($res, 1) : $res;

लेकिन आपके कोड को पढ़ने वाले अधिकांश डेवलपर्स को यह समझने के लिए http://php.net/var_export की यात्रा की आवश्यकता होगी var_exportकि दूसरा पैराम क्या है और क्या है।

1। var_export

booleanइनपुट के लिए काम करता है, लेकिन बाकी सब को भी बदल देता है string

// OK
var_export(false, 1); // 'false'
// OK
var_export(true, 1);  // 'true'
// NOT OK
var_export('', 1);  // '\'\''
// NOT OK
var_export(1, 1);  // '1'

2। ($res) ? 'true' : 'false';

बूलियन इनपुट के लिए काम करता है, लेकिन बाकी सब (ints, तार) को सही / गलत में परिवर्तित करता है।

// OK
true ? 'true' : 'false' // 'true'
// OK
false ? 'true' : 'false' // 'false'
// NOT OK
'' ? 'true' : 'false' // 'false'
// NOT OK
0 ? 'true' : 'false' // 'false'

3। json_encode()

के रूप में एक ही मुद्दे var_exportऔर शायद बदतर के बाद से json_encodeपता नहीं चल सकता है कि क्या स्ट्रिंग trueएक स्ट्रिंग या बूलियन का इरादा था।


var_export()विशिष्ट उपयोग के मामले के लिए सबसे अच्छा लगता है, धन्यवाद।
डॉ। जियानलुइगी ज़ेन ज़ैनेटिनी

PHP 5.5+ इंस्टॉलेशन के लिए, var_export(boolval($var), true)मान "स्ट्रिंग्स" या "गलत" में वैल्यू को बदलने का एक सुरक्षित तरीका है।
faintsignal

if (is_bool($res) { $res = $res ? 'true' : 'false'; } << यह काम नहीं करेगा - ) शायद इसका उपयोग करना बेहतर होगा$result = (is_bool($var) && $var) ? 'true' : 'false';
mtizziani

@aleemb क्या है: $value = is_bool($value) ? var_export($value, true) : $value;इस तरह से मैं मूल्य बरकरार रहता हूं और केवल बूलियन को उनके स्ट्रिंग प्रतिनिधित्व में बदलता हूं।
डिकवान

आपकी मुट्ठी लाइन ऑफ़ कोड में, आपके पास है: $res = $res?? क्या आपका मतलब था $res == $res:? या भी $res === $res:?
शेरिलहोमन


2

मेरे लिए, मैं एक स्ट्रिंग प्रतिनिधित्व चाहता था जब तक कि यह नहीं था null, जिस स्थिति में मैं चाहता था कि वह बनी रहे null

Var_export के साथ समस्या यह है कि यह nullएक स्ट्रिंग में परिवर्तित होता है "NULL"और यह एक खाली स्ट्रिंग को भी परिवर्तित करता है "''", जो अवांछनीय है। कोई आसान उपाय नहीं था जो मुझे मिल सके।

यह वह कोड था जिसका मैंने अंत में उपयोग किया था:

if (is_bool($val)) $val ? $val = "true" : $val = "false";
else if ($val !== null) $val = (string)$val;

यदि आप पसंद करते हैं, तो फ़ंक्शन में फेंकने के लिए लघु और सरल और आसान।


1

boolval()जटिल तालिकाओं के लिए काम करता है जहां चर घोषित करना और लूप और फिल्टर जोड़ना काम नहीं करता है। उदाहरण:

$result[$row['name'] . "</td><td>" . (boolval($row['special_case']) ? 'True' : 'False') . "</td><td>" . $row['more_fields'] = $tmp

जहां $tmpअन्य डेटा को स्थानांतरित करने के लिए एक कुंजी का उपयोग किया जाता है। यहां, मैं चाहता था कि तालिका 1 के लिए "हां" प्रदर्शित करे और 0 के लिए कुछ भी नहीं, इसलिए उपयोग किया गया (boolval($row['special_case']) ? 'Yes' : '')


1
कब boolval(some_expression) ? .. : ..से अलग व्यवहार करता है some_expression ? .. : ..?
टूलमेकर

1

यह किसी भी प्रकार के मूल्य के लिए भी काम करता है:

$a = true;

echo $a                     // outputs:   1
echo value_To_String( $a )  // outputs:   true

कोड:

function valueToString( $value ){ 
    return ( !is_bool( $value ) ?  $value : ($value ? 'true' : 'false' )  ); 
}

1

संपादित के आधार पर @ सेबस्टियन-norr सुझाव उनका कहना है कि $boolवैरिएबल या सच नहीं हो सकता हो सकता है 0या 1। उदाहरण के लिए, PHP में बूलियन टेस्ट के माध्यम से इसे चलाते समय 2हल करता है true

समाधान के रूप में, मैंने यह सुनिश्चित करने के लिए टाइप कास्टिंग का उपयोग किया है कि हम या में कनवर्ट $boolकरते हैं । लेकिन मुझे यह स्वीकार करना होगा कि सरल अभिव्यक्ति एक तरह से क्लीनर है। 01
$bool ? 'true' : 'false'

नीचे दिए गए मेरे समाधान का उपयोग कभी नहीं किया जाना चाहिए, एलओएल।
यहाँ क्यों नहीं है ...

पुनरावृत्ति से बचने के लिए, बूलियन के स्ट्रिंग प्रतिनिधित्व वाले सरणी को एक निरंतर में संग्रहीत किया जा सकता है जिसे पूरे एप्लिकेशन में उपलब्ध कराया जा सकता है।

// Make this constant available everywhere in the application
const BOOLEANS = ['true', 'false'];

$bool = true;
echo BOOLEANS[(bool)  $bool]; // 'true'
echo BOOLEANS[(bool) !$bool]; // 'false'

0

मैं स्वीकृत उत्तर का प्रशंसक नहीं हूं क्योंकि यह ऐसी किसी भी चीज को रूपांतरित करता है जो झूठ का मूल्यांकन "false"सिर्फ बूलियन और विज़-वर्सा तक नहीं करती है।

वैसे भी यहां मेरा ओटीटी जवाब है, यह var_exportफ़ंक्शन का उपयोग करता है ।

var_exportछोड़कर सभी प्रकार के चर के साथ काम करता है resource, मैंने एक फ़ंक्शन बनाया है जो स्ट्रिंग के लिए एक नियमित कास्ट ( (string)), एक सख्त कास्ट ( var_export) और एक प्रकार की जांच करेगा, जो प्रदान किए गए तर्कों के आधार पर होगा।

if(!function_exists('to_string')){

    function to_string($var, $strict = false, $expectedtype = null){

        if(!func_num_args()){
            return trigger_error(__FUNCTION__ . '() expects at least 1 parameter, 0 given', E_USER_WARNING);
        }
        if($expectedtype !== null  && gettype($var) !== $expectedtype){
            return trigger_error(__FUNCTION__ . '() expects parameter 1 to be ' . $expectedtype .', ' . gettype($var) . ' given', E_USER_WARNING);
        }
        if(is_string($var)){
            return $var;
        }
        if($strict && !is_resource($var)){
            return var_export($var, true);
        }
        return (string) $var;
    }
}

if(!function_exists('bool_to_string')){

    function bool_to_string($var){
        return func_num_args() ? to_string($var, true, 'boolean') : to_string();        
    }
}

if(!function_exists('object_to_string')){

    function object_to_string($var){
        return func_num_args() ? to_string($var, true, 'object') : to_string();        
    }
}

if(!function_exists('array_to_string')){

    function array_to_string($var){
        return func_num_args() ? to_string($var, true, 'array') : to_string();        
    }
}

0
$converted_res = isset ( $res ) ? ( $res ? 'true' : 'false' ) : 'false';

issetयहां जरूरी नहीं है। Php में, if-test दोनों के लिए गलत है nullऔर variable not defined। बस के $converted_res = ( $res ? 'true' : 'false' );रूप में पुराने उत्तरों में देखा जा सकता है।
टूलमेकर

0
function ToStr($Val=null,$T=0){

    return is_string($Val)?"$Val"
    :
    (
        is_numeric($Val)?($T?"$Val":$Val)
        :
        (
            is_null($Val)?"NULL"
            :
            (
                is_bool($Val)?($Val?"TRUE":"FALSE")
                :
                (
                    is_array($Val)?@StrArr($Val,$T)
                    :
                    false
                )
            )
        )
    );

}
function StrArr($Arr,$T=0)
{
    $Str="";
    $i=-1;
    if(is_array($Arr))
    foreach($Arr AS $K => $V)
    $Str.=((++$i)?", ":null).(is_string($K)?"\"$K\"":$K)." => ".(is_string($V)?"\"$V\"":@ToStr($V,$T+1));
    return "array( ".($i?@ToStr($Arr):$Str)." )".($T?null:";");
}

$A = array(1,2,array('a'=>'b'),array('a','b','c'),true,false,ToStr(100));
echo StrArr($A); // OR ToStr($A) // OR ToStr(true) // OR StrArr(true)

-2

बस अद्यतन करना चाहता था, PHP> = 5.50 में आप boolval()एक ही काम कर सकते हैं

यहाँ संदर्भ


3
यह प्रयोग करने के समान है(bool) $var;
Al.G.

धन्यवाद! यह मेरे लिए एक जटिल तालिका में काम करता था। इसे इस तरह से उपयोग करें:"<td>" . (boolval($row['special_case']) ? 'Yes' : ' ') . "</td>"
मोटरबाइ

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