CodeIgniter模型类:
public function get_all() {
$query = $this->db->get('my_table');
return $query->result();
}
查询结果将is_active字段的值返回为字符串“0”/“1”。我想要它是真/假。这样,该字段的json数据为true / false。
控制器类:
$query_result = $this->model->get_all();
echo json_encode($query_result);
我是怎么做到的?
更新 查询结果数组是:
Array (
[0] => stdClass Object
(
[brand_id] => 1014
[brand_name] => Coca Cola
[brand_logo] => coca_cola_logo2.png
[is_active] => 1
)
[1] => stdClass Object
(
[brand_id] => 1015
[brand_name] => Hallmark
[brand_logo] => hallmark_logo.jpg
[is_active] => 0
)
[2] => stdClass Object
(
[brand_id] => 1016
[brand_name] => Binjar
[brand_logo] => binjar3.png
[is_active] => 1
)
)
答案 0 :(得分:1)
答案是不需要转换。
但如果你坚持......
在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);
将输出
布尔值为真
布尔值假
Javascript也可以测试"真实性"返回的数据是返回的值是true
,"1"
还是整数1
。
这是一个测试前提的控制器和视图。
<强>控制器:强>
<?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
返回的布尔值为True
返回的整数为True
将返回更改为FALSE的各种表示,如此,
$data = array('asString' => '0', 'asBool' => FALSE, 'asInt' => 0);
echo json_encode($data);
点击按钮产生
返回的字符串为False
返回的布尔值为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);
产生此结果
返回的字符串为False
返回的布尔值为True
返回的整数为假
&#34; false&#34;数据...
$data = array('asString' => '0', 'asBool' => FALSE, 'asInt' => 0);
结果是这个
返回的字符串为False
返回的布尔值为False
返回的整数为假
因此,通过使用松散相等(==
),您可以进行条件测试而不必担心控制器返回的数据类型。
答案 1 :(得分:0)
使用array_map函数将0/1更改为true / false:
$query_result = $this->model->get_all();
$returnArr = array_map(function($value) { return ($value?'true':'false');}, $query_result);
echo json_encode($returnArr);
更新1:保留其他值
将您的array_map
更改为:
array_map(function($value) {
if($value === 1) {
return 'true';
}
else if($value === 0){
return 'false';
}
else{
return $value;
}
}, $query_result);