答案是不需要转换。
但如果你坚持...
在 PHP 方面,除了使用 array_map() 之外,您还可以遍历结果集并将值转换为布尔值。
foreach($query_result as $result){
$result->is_active = (bool) $result->is_active;
}
就这么简单……但毫无意义。整数 1 和 0 将使用松散比较例如评估为 TRUE 和 FALSE。
var_dump(1 == TRUE);
var_dump(0 == TRUE);
会输出
布尔真
布尔假
无论返回值是true、"1",还是整数1,Javascript 也能够测试返回数据的“真实性”。
这里是一个控制器和视图测试的前提。
控制器:
<?php
class Testcase extends CI_Controller
{
function __construct()
{
parent::__construct();
$this->load->helper('form');
}
function index()
{
$this->load->view('test_view');
}
public function respond()
{
$data = array('asString' => '1', 'asBool' => TRUE, 'asInt' => 1);
echo json_encode($data);
}
}
查看:
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
</head>
<body>
<?= form_open("#", ['id' => 'form']); ?>
<input type="submit" id="btn" value="Click Me!">
<?= form_close(); ?>
<div id="as-string"></div>
<div id="as-bool"></div>
<div id="as-int"></div>
<script>
$(document).ready(function () {
$("#form").submit(function (event) {
event.preventDefault();
$.ajax({
type: 'POST',
url: 'testcase/respond',
data: $('#form').serializeArray(),
dataType: "json",
success: function (data) {
console.log(data);
if (data.asString == true) {
$('#as-string').text('String returned is True');
} else {
$('#as-string').text('String returned is False');
}
if (data.asBool == true) {
$('#as-bool').text('Boolean returned is True');
} else {
$('#as-bool').text('Boolean returned is False');
}
if (data.asInt == true) {
$('#as-int').text('Integer returned is True');
} else {
$('#as-int').text('Integer returned is False');
}
}
});
});
});
</script>
</body>
</html>
提交表单会在浏览器中生成此结果
返回的字符串为真
返回的布尔值为 True
返回的整数为真
像这样将返回值更改为 FALSE 的各种表示,
$data = array('asString' => '0', 'asBool' => FALSE, 'asInt' => 0);
echo json_encode($data);
点击按钮会产生
返回的字符串为假
返回的布尔值是 False
返回的整数为假
请注意,javascript 使用松散相等 (==) 进行条件检查。如果您更改为严格相等 (===),结果会发生变化。
将成功函数更改为使用严格相等...
success: function (data) {
console.log(data);
if (data.asString === true) {
$('#as-string').text('String returned is True');
} else {
$('#as-string').text('String returned is False');
}
if (data.asBool === true) {
$('#as-bool').text('Boolean returned is True');
} else {
$('#as-bool').text('Boolean returned is False');
}
if (data.asInt === true) {
$('#as-int').text('Integer returned is True');
} else {
$('#as-int').text('Integer returned is False');
}
}
并从控制器返回此数据
$data = array('asString' => '1', 'asBool' => TRUE, 'asInt' => 1);
产生这个结果
返回的字符串为假
返回的布尔值为 True
返回的整数为假
使用“假”数据...
$data = array('asString' => '0', 'asBool' => FALSE, 'asInt' => 0);
结果是这样的
返回的字符串为假
返回的布尔值是 False
返回的整数为假
因此,通过使用松散相等 (==),您可以进行条件测试,而无需担心控制器返回的数据类型。