如何检查 php 中类型为 'character varying' 的字段的值是数字还是字符串?



我正在显示"产品"表中的"位置"列表。现在,此字段"位置"包含字符串值或数字。如果它是一个数字,它指的是表"free_shipping_locations"的 id,而如果它是一个字符串,它指的是"default_locations"的位置字段。现在我必须显示"产品"表中的"位置",但它应该显示相应的值,例如如果它是一个数字,它应该显示"free_shipping_location"的位置,如果它是一个字符串,它应该显示该值。那么我如何检查字段"位置"的值是数字还是字符串。有关信息:"位置"的数据类型为character varying

首先,如果您有机会更改此数据库结构,请这样做。拥有具有两种完全不同的含义的单个列将继续使您的生活难以在应用程序的生命周期内。要么将所有可能的值放在引用的表中并始终存储一个location_id,要么有两个可为空的列,一个location_id,另一个location_free_text,约束是每行都有一个或另一个(而不是两个(。

但是,假设你不能这样做,你想要的PHP函数是ctype_digit

检查提供的字符串(文本(中的所有字符是否都是数字。

所以它会返回true'123',但false'abc''-1.2'

请注意,如果给定字符串以外的内容,它会出错,因此您经常希望使用(string)"转换"参数以确保它是:

if ( ctype_digit((string)$your_value) ) {
// It looks like an ID
} else {
// It's some other string
}

我不得不在postgresql中查找character varying,我的假设是PHP将始终从这些列类型接收一个字符串,因此解决方案是:

// Check if the string only contains digits
if( ctype_digit( $row[ 'locations' ] ) )
{
// we have an ID!
}
else
{
// we have some string which is probably not an ID!
}

最新更新