将result_array()元素之一作为整数返回

时间:2014-03-12 21:03:14

标签: php mysql casting

这篇文章非常有用:MySQL integer field is returned as string in PHP

在我的模型中,我有一个result_array(),我希望每个'row'(bookID)中的六个元素中的一个在返回控制器时成为INT。

$bookList = $this->db->query('SELECT bookID....etc')->result_array();

我的var_dump产生了这个..

1 => 
array (size=6)
  'ownerID' => string '6' (length=1)
  'bookID' => string '53' (length=2)
  'address' => string '123 main road to wherever' (length=25)
  'Company' => string 'xxxxxxxxxx xxxxxxxx' (length=18)
  'FullName' => string 'John Smith' (length=10)
2 => ...etc...
3 => ...etc...
4 => ...etc...



1 => 
array (size=6)
  'ownerID' => string '6' (length=1)
  'bookID' => int 53
  'address' => string '123 main road to wherever' (length=25)
  'Company' => string 'xxxxxxxxxx xxxxxxxx' (length=18)
  'FullName' => string 'John Smith' (length=10)
2 => ...etc...
3 => ...etc...
4 => ...etc...

迭代结果数组的最有效方法是什么,它可能有1,000行,在将结果返回给调用函数之前将第二个元素从字符串更改为INT?

return $bookList;

2 个答案:

答案 0 :(得分:0)

我想到你可以使用array_map()原生函数。它将您定义的函数应用于数组的每个元素,并在应用该函数后返回最终数组。

我做了一个例子,因为我喜欢这个功能:

<pre>
<?

$results = array(

    array(
        "val" => "1",
        "name" => "maria"
    ),
    array(
        "val" => "10",
        "name" => "jorge"
    )

);


function castToInt($array) {
    $array['val'] = (int) $array['val'];
    return $array;
}

var_dump(array_map('castToInt', $results)); 

?>
</pre>

var_dump(...)给你这个输出:

array(2) {
  [0]=>
  array(2) {
    ["val"]=>
    int(1)
    ["name"]=>
    string(5) "maria"
  }
  [1]=>
  array(2) {
    ["val"]=>
    int(10)
    ["name"]=>
    string(5) "jorge"
  }
}

答案 1 :(得分:0)

要问的问题是:result_array()(或者这个包装器)如何知道哪个类型/哪个列要转换为哪种类型?

在任何情况下,您都需要遍历所有返回的行(只是因为您想要更改每一行)。然后你可以像这样做一个检查

foreach ($rows as &$row) {
    foreach ($row as &$column) {
        if ( (int) $column == $column )
            $column = (int) $column;
    }
}

如果您对&感到恼火,我建议the official manual(搜索&#34; 参考&#34;)。但是,这个方法需要相当长的时间 - 只是因为它将遍历每一行中的每一列并尝试找出是否转换为整数(简单的相等不应该是真正的检查,但在这里作为一个片段) )。

为了省去一些时间,您需要定义哪个列应该转换为哪种类型。我建议为此创建一些结构,例如数组 - 如果你想稍后修改它,硬编码的解决方案会给你额外的悲伤。例如像这样

$ints = array('ownerID', 'bookID');
foreach ($rows as &$row) {
    foreach ($ints as $intKey) {
        $row[ $intKey ] = (int) $row[ $intKey ];
    }
}

现在可以使用原生功能加快速度,例如array_map() D. Melo所示的{{3}}。