Mam zmienną logiczną, którą chcę przekonwertować na ciąg:
$res = true;
Potrzebuję przekonwertowanej wartości w formacie:, "true" "false"
nie"0" "1"
$converted_res = "true";
$converted_res = "false";
Próbowałem:
$converted_res = string($res);
$converted_res = String($res);
Ale to mi mówi string
i String
nie są rozpoznanymi funkcjami.
Jak przekonwertować wartość logiczną na ciąg znaków w formacie "true"
lub "false"
w PHP?
Odpowiedzi:
Najprostsze rozwiązanie:
$converted_res = $res ? 'true' : 'false';
źródło
?:
Notacja jest najbardziej uproszczony kod możemy wymyślić w tej sytuacji.echo '<active>' . $res ? 'true' : 'false' . '</active>';
nie daje pożądanego rezultatu,echo '<active>' . ($res ? 'true' : 'false') . '</active>';
robi.Funkcja var_export zwraca ciąg reprezentujący zmienną, więc możesz to zrobić:
Drugi argument mówi funkcji, aby zwracała ciąg zamiast go powtarzać.
źródło
Kolejny sposób:
json_encode( booleanValue )
źródło
var_export()
jest bardziej zgodne z celem operacji (chyba że ktoś potrzebuje łańcucha dla jakiegoś JSON, to znaczy ;-)Zobacz var_export
źródło
edit
dołączyć odpowiednie informacje z linku. Chociaż informacja jest przydatna, bardziej trafnie pozostawia się ją jako „komentarz” do PO. Wszystkie niezbędne informacje z linku muszą być osadzone w odpowiedzi. 1) Gdyby link był nieosiągalny, ten post stałby się bezużyteczny. 2) odwiedzający nie powinni być zobowiązani do odwiedzania linków zewnętrznych, a jedynie do samodzielnego zrozumienia. To powiedziawszy, linki do dokumentacji, źródeł lub dodatkowych informacji są bardzo zalecane. Dziękuję za Twój wkład.Używasz strval () lub (string) do konwersji na ciąg znaków w PHP. Jednak to nie przekształca wartości logicznej w rzeczywistą pisownię „prawda” lub „fałsz”, więc musisz to zrobić samodzielnie. Oto przykładowa funkcja:
źródło
$val = true;
wtedystrval($val)
i(string) $val
oboje wrócą 1.Wszystkie pozostałe rozwiązania mają tutaj pewne zastrzeżenia (choć odnoszą się do podanego pytania). Jeśli (1) zapętlasz mieszane typy lub (2) chcesz ogólnego rozwiązania, które możesz wyeksportować jako funkcję lub dołączyć do swoich narzędzi, żadne inne rozwiązanie tutaj nie będzie działać.
Najprostszym i najbardziej zrozumiałym rozwiązaniem jest:
Ale większość programistów czytających Twój kod będzie potrzebować podróży na http://php.net/var_export, aby zrozumieć, co
var_export
robi i jaki jest drugi parametr.1.
var_export
Działa na
boolean
dane wejściowe, ale konwertuje także wszystko innestring
.2)
($res) ? 'true' : 'false';
Działa dla danych logicznych, ale konwertuje wszystko inne (inty, ciągi znaków) na true / false.
3)
json_encode()
Te same problemy
var_export
i prawdopodobnie gorsze, ponieważjson_encode
nie można wiedzieć, czy ciągtrue
miał być ciągiem, czy wartością logiczną.źródło
var_export()
wydaje się być najlepszy dla konkretnego przypadku użycia, dzięki.var_export(boolval($var), true)
jest bezpieczną drogą do przekształcenia wartości na ciągi „prawda” lub „fałsz”.if (is_bool($res) { $res = $res ? 'true' : 'false'; }
<< to nie zadziała - brak)
może być lepiej użyć$result = (is_bool($var) && $var) ? 'true' : 'false';
$value = is_bool($value) ? var_export($value, true) : $value;
ten sposób żyję nienaruszoną wartością i zmieniam tylko wartość logiczną na ich ciąg znaków.$res = $res
?? Czy miałeś na myśli$res == $res
:? Albo nawet:$res === $res
?Dlaczego po prostu tego nie robisz ?:
źródło
Dla mnie chciałem przedstawienia ciągów znaków, chyba że tak było
null
, w takim przypadku chciałem, aby pozostałonull
.Problem z var_export polega na tym, że konwertuje
null
on ciąg znaków,"NULL"
a także konwertuje pusty ciąg znaków"''"
, co jest niepożądane. Nie mogłem znaleźć łatwego rozwiązania.Oto kod, którego w końcu użyłem:
Krótkie, proste i łatwe do wprowadzenia, jeśli wolisz.
źródło
boolval()
działa w przypadku skomplikowanych tabel, w których nie działają deklarowanie zmiennych oraz dodawanie pętli i filtrów. Przykład:gdzie
$tmp
jest używany klucz do transpozycji innych danych. Tutaj chciałem, aby tabela wyświetlała „Tak” dla 1, a nic dla 0, więc używane(boolval($row['special_case']) ? 'Yes' : '')
.źródło
boolval(some_expression) ? .. : ..
zachowuje się inaczej niżsome_expression ? .. : ..
?Działa to również w przypadku dowolnej wartości:
kod:
źródło
Edytowane na podstawie sugestii @ sebastian-norr, wskazując, że
$bool
zmienna może być, ale nie musi być prawdą0
lub1
. Na przykład2
rozwiązuje problemtrue
podczas uruchamiania go przez test boolowski w PHP.Jako rozwiązanie zastosowałem rzutowanie typu, aby zapewnić konwersję
$bool
do0
lub1
.Ale muszę przyznać, że proste wyrażenie
$bool ? 'true' : 'false'
jest o wiele czystsze.Moje rozwiązanie zastosowane poniżej nigdy nie powinno być używane, LOL.
Oto dlaczego nie ...
Aby uniknąć powtórzeń, tablica zawierająca ciąg znaków wartości logicznej może być przechowywana w stałej, która może być dostępna w całej aplikacji.
źródło
Nie jestem fanem przyjętej odpowiedzi, ponieważ konwertuje wszystko, co daje w wyniku fałsz, na
"false"
nie tylko logiczne i odwrotnie.W każdym razie oto moja odpowiedź OTT, używa
var_export
funkcji.var_export
działa ze wszystkimi typami zmiennych, z wyjątkiem tegoresource
, że utworzyłem funkcję, która będzie wykonywać regularne rzutowanie na string ((string)
), ścisłe rzutowanie (var_export
) i sprawdzanie typu, w zależności od podanych argumentów.źródło
źródło
isset
nie jest to konieczne tutaj. W phpif
-test jest fałszywe zarówno dla, jaknull
i dlavariable not defined
. Można po prostu zrobić,$converted_res = ( $res ? 'true' : 'false' );
jak widać w starszych odpowiedziach.źródło
Chciałem tylko zaktualizować, w PHP> = 5.50 możesz zrobić
boolval()
to samoOdwołaj się tutaj .
źródło
(bool) $var;
"<td>" . (boolval($row['special_case']) ? 'Yes' : ' ') . "</td>"
boolval()
idzie w drugą stronę, konwertując zmienną dowolnego typu na bool, a nie bool na string.