在codeigniter中获取tinyint的查询结果列值为true / false

时间:2016-05-29 08:53:19

标签: php mysql json codeigniter

我在my_table中有一列,其数据类型为tinyint
a column of table contains tinyint datatype

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
    )

)

2 个答案:

答案 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);

Demo

更新1:保留其他值

将您的array_map更改为:

array_map(function($value) { 
    if($value === 1) {
        return 'true';
    }
    else if($value === 0){
        return 'false';
    }
    else{
        return $value;
    }
}, $query_result);

Demo