我有一个简单的函数,它查看传入的mySQL数据类型,然后将其汇总到“类别”(在此代码中称为系列),以便我可以在类别级别应用默认值。无论如何,此代码适用于查找整数,字符和文本类别,但在datetime和decimal类别上完全失败。我的智慧结束了。任何帮助将不胜感激:
public static function get_family_type ( $col_type ) {
$families = array (
'integer' => array ( 'integer', 'int', 'tinyint', 'mediumint', 'bigint' ),
'fixed' => array ( 'decimal', 'numeric' ),
'floating' => array ( 'float' , 'double' ),
'character' => array ( 'char', 'varchar' ),
'datetime' => array ( 'datetime' , 'timestamp'),
'time' => array ('time'),
'date' => array ('year'),
'text' => array ('tinytext', 'text', 'mediumtext' , 'longtext'),
'blob' => array ('blob','tinyblob','mediumblob','longblob')
);
// first get rid of any optional length parameterisation
list ( $col_type ) = explode ( "(" , $col_type , 2 );
foreach ($families as $family => $family_members) {
if ( array_search ( $col_type , $family_members , true ) ) {
return $family;
}
}
return "unknown $col_type";
}
注意最后一行的备份return语句,然后从我在代码中其他地方定义的表中查看此输出。
[18-Jun-2012 17:39:24] Getting default for family of integer
[18-Jun-2012 17:39:24] Getting default for family of text
[18-Jun-2012 17:39:24] Getting default for family of character
[18-Jun-2012 17:39:24] Getting default for family of character
[18-Jun-2012 17:39:24] Getting default for family of character
[18-Jun-2012 17:39:24] Getting default for family of character
[18-Jun-2012 17:39:24] Getting default for family of character
[18-Jun-2012 17:39:24] Getting default for family of character
[18-Jun-2012 17:39:24] Getting default for family of character
[18-Jun-2012 17:39:24] Getting default for family of character
[18-Jun-2012 17:39:24] Getting default for family of character
[18-Jun-2012 17:39:24] Getting default for family of integer
[18-Jun-2012 17:39:24] Getting default for family of integer
[18-Jun-2012 17:39:24] Getting default for family of unknown decimal
[18-Jun-2012 17:39:24] Getting default for family of character
[18-Jun-2012 17:39:24] Getting default for family of unknown datetime
[18-Jun-2012 17:39:24] Getting default for family of floating
答案 0 :(得分:3)
array_search成功返回数组键,有时值为0.在php中,0强制为布尔值false。你需要检查
if ( array_search ( $col_type , $family_members , true ) !== false ) {
return $family;
}
请注意严格的比较!==
php手册在array_search的文档中提到了这一点。
答案 1 :(得分:2)
你的改变:
if ( array_search ( $col_type , $family_members , true ) ) {
return $family;
}
到
if ( in_array( $col_type , $family_members , true ) ) {
return $family;
}
请注意:
array_search - 在数组中搜索给定值并返回 相应的密钥如果成功
所以,它不是来自array_search的布尔返回,这可能是为什么它不能按你的意愿工作。