Boole dize dönüştürme


242

Bir dizeye dönüştürmek istediğiniz bir Boolean değişkeni var:

$res = true;

Ben biçiminde olması için dönüştürülen değeri gerekir: "true" "false"değil"0" "1"

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

Denedim:

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

Ama bana bunu söyler stringve Stringtanınan işlevler değildir.
Bu Boole'yi PHP "true"veya "false"PHP biçimindeki bir dizeye nasıl dönüştürebilirim ?


1
Yeni kullanım işlevi ((string) $ param [boolean type]) {if ($ param) {....}} çünkü (string) false => "false" yanlış değil ...
zloctb

Yanıtlar:


361

En basit çözüm:

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


1
Bunu yapmanın en kolay yolu budur, ancak neye ihtiyacınız olduğuna bağlıdır, çünkü en iyi sülfür olmayabilir.
Androme

1
@DoomStone 3 yıl geçtiğini biliyorum, ama sadece bazı durumlarda en iyi çözüm olmadığını düşündüğünüzü bilmek istedim. ?:Notasyonu bu durumda ortaya çıkabilecek en basitleştirilmiş bir koddur.
caiosm1005

1
Örneğin benim için, eldeki dava için en iyi çözüm değil: Dönüş değerinin türünün ne olduğundan emin değilim; boolean veya başka bir şey olabilir. (Hata ayıklama sırasında başka birinin yazdığı bir işlevi çağırmak.) Çözümünüz $ res'i boole değerine dönüştürürken, var_export olası tüm türleri işleyebilir.

13
@ user2443147 boole olan tür, kelimenin tam anlamıyla soruda belirtilen ilk gerçektir. Karşılaştığınız türden emin değilseniz, başlamak için başka bir sorun setiniz var.
nem75

3
Üçlü işleç ve dize birleştirme işlemlerini karıştırırken fazladan parantez gerektiğini unutmayın. echo '<active>' . $res ? 'true' : 'false' . '</active>';istenen sonucu echo '<active>' . ($res ? 'true' : 'false') . '</active>';vermez , yapar.
Salman A

194

Fonksiyon var_export Bunu böylece, bir değişkenin bir dize temsilini döndürür:

var_export($res, true);

İkinci argüman işleve dizeyi yankılamak yerine döndürmesini söyler.


Mükemmel cevap. Bu, "bir değişkenin
ayrıştırılabilir

62

Yapmanın başka bir yolu: json_encode( booleanValue )

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

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

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

6
Ben semantik kullanarak var_export()operasyonun amacı ile daha uyumlu olduğunu düşünüyorum (biri bazı JSON için dize ihtiyaç duymadıkça, yani ;-)
Adam Cameron

3
Bu gerçekten, JSON temsilinin istenenle aynı olduğu yan etkisine dayanır. Ayrıca, kurulabilen ve etkinleştirilen JSON uzantısına da bağlıdır; bu çok olası olabilir, ancak belirli bir veri değildir. Yani imho bu temiz bir çözüm değil.
Nick Rice

35

Bkz .


3
Daha fazla ayrıntı için Christian'ın cevabına bakınız . Özellikle, ikinci argümanı ekleyin (true).
Jimothy

Bu, "Yanıt" için SO yönergelerine uymayan bir "salt bağlantı" cevabıdır. Lütfen editbağlantıdaki ilgili bilgileri yayınınıza ekleyin. Bilgiler yararlı olsa da, OP'ye daha uygun bir şekilde "Yorum" olarak bırakılmıştır. Bağlantıdan gerekli tüm bilgiler cevaba eklenmelidir. 1) Bağlantıya ulaşılamaz olsaydı, bu yazı işe yaramaz hale gelirdi. 2) ziyaretçilerin dış bağlantıları ziyaret etmeleri istenmemeli, sadece kendi başlarına anlamaları istenmelidir. Bununla birlikte, belgelere, kaynaklara veya ek bilgilere bağlantılar şiddetle tavsiye edilir. Katkınız için teşekkürler.
SherylHohman

12

PHP'de dizeye dönüştürmek için strval () veya (string) kullanırsınız. Ancak, bu booleanı "doğru" veya "yanlış" ın gerçek yazımına dönüştürmez, bu yüzden bunu kendiniz yapmanız gerekir. İşte bir örnek fonksiyon:

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

Eğer $val = true;öyleyse strval($val)ve (string) $valher ikisi de 1'e
dönerse

9

Buradaki diğer çözümlerin hepsinde uyarılar var (eldeki soruyu ele alsalar da). (1) Karışık tipler üzerinde döngü yapıyorsanız veya (2) bir işlev olarak dışa aktarabileceğiniz veya yardımcı programlarınıza ekleyebileceğiniz genel bir çözüm istiyorsanız, buradaki diğer çözümlerin hiçbiri çalışmayacaktır.

En basit ve en açıklayıcı çözüm:

// 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;

Ancak kodunuzu okuyan çoğu geliştiricinin , ne yaptığını ve ikinci parametrenin ne olduğunu anlamak için http://php.net/var_export adresine bir yolculuk yapması gerekir var_export.

1. var_export

booleanGiriş için çalışır, ancak diğer her şeyi bir 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';

Boole girişi için çalışır, ancak diğer her şeyi (ints, dize) true / false değerine dönüştürür.

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

3. json_encode()

Dize bir dize mi yoksa bir boole mi amaçlandığını bilemediğinden, aynı sorunlar var_exportve muhtemelen daha kötü .json_encodetrue


var_export()özel kullanım durumu için en iyisi gibi görünüyor, teşekkürler.
Dr.Gluluigi Zane Zanettini

PHP 5.5+ yüklemeleri için, var_export(boolval($var), true)değeri "true" veya "false" dizelerine dönüştürmenin güvenli bir yoludur.
faintsignal

if (is_bool($res) { $res = $res ? 'true' : 'false'; } << Bu işe yaramaz - ) belki de kullanmak daha iyi$result = (is_bool($var) && $var) ? 'true' : 'false';
mtizziani

@aleemb Ne hakkında: $value = is_bool($value) ? var_export($value, true) : $value;Bu şekilde değeri sağlam olarak yaşıyorum ve sadece boole dize temsillerini değiştirmek.
dickwan

Yumruk kod satırında var: $res = $res?? Şunu mu demek istedin $res == $res? Hatta: $res === $res?
SherylHohman

2

Neden böyle yapmıyorsun ?:

if ($res) {
    $converted_res = "true";
}
else {
    $converted_res = "false";
}

2

Benim için, olmadıkça bir dize temsili istedim null, bu durumda kalmasını istedimnull .

Var_export ile ilgili sorun, nullbir dizeye "NULL"ve boş bir dizeyi"''" . Bulabildiğim kolay bir çözüm yoktu.

Sonunda kullandığım kod buydu:

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

Kısa ve basit ve kolay bir fonksiyon atmak isterseniz de.


1

boolval()değişken bildirme, döngü ve filtre ekleme işlemlerinin çalışmadığı karmaşık tablolar için çalışır. Misal:

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

burada $tmpdiğer verileri aktarmak için kullanılan bir anahtardır. Burada, tablonun 1 için "Evet" ve 0 için hiçbir şey görüntülemesini istedim (boolval($row['special_case']) ? 'Yes' : '').


1
Ne zaman boolval(some_expression) ? .. : ..farklı davranıyor some_expression ? .. : ..?
ToolmakerSteve

1

Bu aynı zamanda her türlü değer için de geçerlidir:

$a = true;

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

kod:

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

1

@ Sebastian-norr önerisine dayanarak düzenlenmiş olup $booldeğişkenin doğru 0ya da olmayabilir 1. Örneğin, PHP'de bir Boole testi ile çalıştırırken 2çözülür true.

Bir çözüm olarak, ben dönüştürmek sağlamak için kullanılan türü çevrim sahip $boolüzere 0ya 1.
Ama itiraf etmeliyim ki basit ifade $bool ? 'true' : 'false'çok daha temiz.

Aşağıda kullandığım çözüm asla kullanılmamalıdır, LOL.
İşte neden olmasın ...

Tekrardan kaçınmak için, Boolean dizesini temsil eden dizi, uygulama boyunca kullanılabilir hale getirilebilen bir sabitte saklanabilir.

// 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

Ben "false"sadece boolean ve tersi için yanlış olarak değerlendirir bir şey dönüştürür kabul edilen cevap hayranı değilim .

Her neyse, burada OTT cevabım, var_exportişlevi kullanıyor .

var_exportdışında tüm değişken türleri ile çalışır resource, ben sağlanan bağımsız değişkenlere bağlı olarak, string ( (string)), bir katı cast ( var_export) ve bir tür kontrol düzenli bir döküm gerçekleştirecek bir işlev oluşturduk ..

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';

issetburada gerekli değil. Php, if-test hem nullve için yanlıştır variable not defined. Basitçe $converted_res = ( $res ? 'true' : 'false' );eski cevaplarda görüldüğü gibi yapabilir .
ToolmakerSteve

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

Sadece içeri, güncelleme istedi PHP> = 5.50 Yapabileceğiniz boolval()aynı şeyi yapmak

Burada Referans .


3
Bu,(bool) $var;
Al.G. ile aynıdır.

Teşekkür ederim! Bu benim için karmaşık bir tabloda işe yaradı. Bunun gibi kullanılır:"<td>" . (boolval($row['special_case']) ? 'Yes' : ' ') . "</td>"
motorbaby

4
boolval()diğer yöne gider, herhangi bir türdeki değişkeni boole dizeye dönüştürmez.
Mike Chamberlain
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.