Bagaimana Mengonversi Boolean ke String


242

Saya memiliki variabel Boolean yang ingin saya konversi menjadi string:

$res = true;

Saya perlu nilai yang dikonversi menjadi format:, "true" "false"tidak"0" "1"

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

Saya sudah mencoba:

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

Tapi itu memberi tahu saya bahwa stringdan Stringtidak berfungsi.
Bagaimana cara mengonversi Boolean ini menjadi string dalam format "true"atau "false"dalam PHP?


1
Fungsi penggunaan yang lebih baru ((string) $ param [tipe boolean]) {if ($ param) {....}} karena (string) false => "false" tidak salah ...
zloctb

Jawaban:


361

Solusi paling sederhana:

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


1
Ini adalah cara termudah untuk melakukannya, tetapi itu tergantung pada apa yang Anda butuhkan untuk itu mungkin bukan sulution terbaik.
Androme

1
@DoomStone Saya tahu ini sudah 3 tahun, tapi saya hanya ingin tahu apa yang membuat Anda berpikir dalam beberapa kasus itu bukan solusi terbaik. The ?:notasi adalah kode paling sederhana yang kita bisa datang dengan dalam situasi ini.
caiosm1005

1
Sebagai contoh bagi saya, itu bukan solusi terbaik untuk kasus yang ada: Saya tidak yakin apa jenis nilai pengembaliannya; mungkin boolean atau yang lainnya. (Memanggil fungsi yang ditulis orang lain selama debugging.) Solusi Anda mengubah $ res menjadi boolean, sedangkan var_export dapat menangani semua jenis yang mungkin.

13
@ user2443147 tipe yang menjadi boolean secara harfiah adalah fakta pertama yang disebutkan dalam pertanyaan. Jika Anda tidak yakin dengan tipe yang Anda hadapi, Anda memiliki banyak masalah.
nem75

3
Perhatikan bahwa Anda memerlukan tanda kurung tambahan saat Anda mencampur operator ternary dan penggabungan string. echo '<active>' . $res ? 'true' : 'false' . '</active>';tidak menghasilkan hasil yang diinginkan, echo '<active>' . ($res ? 'true' : 'false') . '</active>';tidak.
Salman A

194

Fungsi var_export mengembalikan representasi string dari variabel, sehingga Anda bisa melakukan ini:

var_export($res, true);

Argumen kedua memberi tahu fungsi untuk mengembalikan string alih-alih menggemakannya.


Jawaban sempurna. Ini adalah cara "PHP" untuk mendapatkan "... representasi string yang dapat diuraikan dari suatu variabel"
peterchaula

62

Cara lain untuk dilakukan: json_encode( booleanValue )

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

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

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

6
Saya pikir semantik menggunakan var_export()lebih sesuai dengan maksud operasi (kecuali ada yang membutuhkan string untuk beberapa JSON, yaitu ;-)
Adam Cameron

3
Ini benar-benar bergantung pada efek samping bahwa representasi JSON kebetulan sama dengan apa yang diinginkan. Itu juga bergantung pada ekstensi JSON yang diinstal dan diaktifkan, yang mungkin sangat mungkin tetapi tidak diberikan. Jadi, ini bukan solusi bersih.
Nick Rice

35

Lihat var_export


3
Lihat jawaban Christian untuk lebih detail. Secara khusus, sertakan argumen kedua (benar).
Jimothy

Ini adalah jawaban "hanya tautan", yang tidak memberikan pedoman SO untuk "Jawaban". Harap editsertakan info yang relevan dari tautan ke pos Anda. Meskipun informasi itu berguna, lebih tepat dibiarkan sebagai "Komentar" untuk OP. Semua informasi yang diperlukan dari tautan harus dimasukkan dalam jawaban. 1) Jika tautan tidak dapat dijangkau, pos ini tidak akan berguna. 2) pengunjung tidak perlu mengunjungi tautan eksternal, hanya untuk mencari tahu sendiri. Yang mengatakan, tautan ke dokumentasi, sumber, atau info tambahan sangat dianjurkan. Terima kasih atas kontribusi Anda.
SherylHohman

12

Anda menggunakan strval () atau (string) untuk mengkonversi ke string di PHP. Namun, itu tidak mengubah boolean menjadi ejaan aktual "benar" atau "salah" sehingga Anda harus melakukannya sendiri. Berikut ini contoh fungsi:

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

Jika $val = true;kemudian strval($val)dan (string) $valkeduanya kembali 1.
Abach

9

Solusi lain di sini semua memiliki peringatan (meskipun mereka menjawab pertanyaan di tangan). Jika Anda (1) mengulang tipe campuran atau (2) menginginkan solusi generik yang dapat Anda ekspor sebagai fungsi atau disertakan dalam utilitas Anda, tidak ada solusi lain di sini yang akan berfungsi.

Solusi paling sederhana dan paling jelas adalah:

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

Tetapi sebagian besar pengembang membaca kode Anda akan memerlukan perjalanan ke http://php.net/var_export untuk memahami apa yang var_exportdilakukan dan apa param kedua.

1. var_export

Bekerja untuk booleanmasukan tapi bertobat segala sesuatu yang lain untuk stringjuga.

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

Berfungsi untuk input boolean tetapi mengubah segalanya (int, string) menjadi true / false.

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

3. json_encode()

Masalah yang sama var_exportdan mungkin lebih buruk karena json_encodetidak dapat mengetahui apakah string trueitu dimaksudkan string atau boolean.


var_export()tampaknya menjadi yang terbaik untuk penggunaan khusus, terima kasih.
Dr. Gianluigi Zane Zanettini

Untuk pemasangan PHP 5.5+, var_export(boolval($var), true)adalah rute cara yang aman untuk mengubah nilai menjadi string "benar" atau "salah".
faintsignal

if (is_bool($res) { $res = $res ? 'true' : 'false'; } << ini tidak akan berhasil - hilang ) mungkin lebih baik digunakan$result = (is_bool($var) && $var) ? 'true' : 'false';
mtizziani

@aleemb Bagaimana dengan: $value = is_bool($value) ? var_export($value, true) : $value;Dengan cara ini saya menghidupkan nilai utuh dan hanya mengubah boolean ke representasi string mereka.
dickwan

Di baris kode tinju Anda, Anda memiliki: $res = $res?? Apakah maksud Anda: $res == $res? Atau bahkan $res === $res:?
SherylHohman

2

Kenapa tidak melakukan seperti ini ?:

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

2

Bagi saya, saya ingin representasi string kecuali itu null, dalam hal ini saya ingin tetap adanull .

Masalah dengan var_export adalah konversi nullke string "NULL"dan juga mengkonversi string kosong ke "''", yang tidak diinginkan. Tidak ada solusi mudah yang bisa saya temukan.

Ini adalah kode yang akhirnya saya gunakan:

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

Pendek dan sederhana dan mudah untuk melempar fungsi juga jika Anda mau.


1

boolval()berfungsi untuk tabel rumit di mana mendeklarasikan variabel dan menambahkan loop dan filter tidak berfungsi. Contoh:

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

di mana $tmpadalah kunci yang digunakan untuk memindahkan data lain. Di sini, saya ingin tabel menampilkan "Ya" untuk 1 dan tidak ada untuk 0, jadi digunakan (boolval($row['special_case']) ? 'Yes' : '').


1
Kapan boolval(some_expression) ? .. : ..berperilaku berbeda dari some_expression ? .. : ..?
ToolmakerSteve

1

Ini juga berfungsi untuk segala jenis nilai:

$a = true;

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

kode:

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

1

Diedit berdasarkan pada saran @ sebastian-norr yang menunjukkan bahwa $boolvariabel mungkin benar 0atau tidak 1. Sebagai contoh, 2putuskan truekapan menjalankannya melalui tes Boolean dalam PHP.

Sebagai solusi, saya telah menggunakan tipe casting untuk memastikan bahwa kami mengonversi $boolke 0atau 1.
Tapi saya harus akui itu ungkapan yang sederhana$bool ? 'true' : 'false' itu lebih bersih.

Solusi saya yang digunakan di bawah tidak boleh digunakan, LOL.
Inilah mengapa tidak ...

Untuk menghindari pengulangan, array yang berisi representasi string dari Boolean dapat disimpan dalam konstanta yang dapat disediakan di seluruh aplikasi.

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

Saya bukan penggemar jawaban yang diterima karena mengubah apa pun yang bernilai false menjadi "false"bukan hanya boolean dan sebaliknya.

Pokoknya inilah jawaban OTT saya, ia menggunakan var_exportfungsi.

var_exportberfungsi dengan semua tipe variabel kecuali resource, saya telah membuat fungsi yang akan melakukan cast reguler ke string ( (string)), cast ketat ( var_export) dan pemeriksaan tipe, tergantung pada argumen yang disediakan ..

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

issettidak perlu di sini. Di php, if-test adalah salah untuk keduanya nulldan variable not defined. Dapat dilakukan $converted_res = ( $res ? 'true' : 'false' );seperti yang terlihat pada jawaban yang lebih lama.
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

Hanya ingin memperbarui, dalam PHP> = 5,50 yang dapat Anda lakukan boolval()untuk melakukan hal yang sama

Referensi di sini .


3
Ini sama dengan menggunakan(bool) $var;
Al.G.

Terima kasih! Ini bekerja untuk saya di meja yang rumit. Digunakan seperti ini:"<td>" . (boolval($row['special_case']) ? 'Yes' : ' ') . "</td>"
motorbaby

4
boolval()sebaliknya, mengubah variabel tipe apa pun menjadi bool, bukan bool menjadi string.
Mike Chamberlain
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.