如果条件不适用于 strpos
If condition not working with strpos
我创建了自定义函数 OutputMessage
从我插入错误消息的地方 ClassStyle
像这样 Error: image upload failed!
然后我分解字符串并拆分 class从它添加到 div class
但我的功能无法正常工作。
function OutputMessage($Message=''){
if($Message){
$Postion = strpos($Message,":");
if($Postion !== TRUE){
return sprintf('<div class="alert alert-default">%s</div>',$Message);
}else{
$Message = explode(": ",$Message);
return sprintf('<div class="alert alert-%s">%s</div>',strtolower($Message[0]),$Message[1]);
}
}else{
return "";
}
}
$Position
检查不工作,因为我传递的消息是 class 但它仍然返回默认值 class
来自manual entry of strpos() function:
Returns the position of where the needle exists relative to the beginning of the haystack string (independent of offset). Also note that string positions start at 0, and not 1.
Returns FALSE if the needle was not found.
这意味着 if($Postion !== TRUE)
将永远是 true
,因为 strpos()
永远不会 returns true
.
要使您的函数按预期工作,请将您的 if
语句更改为 if($Postion === false)
。
从 strpos 的文档中,您可以看到该函数将 NEVER
return 为真。只需在 if 语句中将其更改为 false 即可,一切正常。
为什么你不能这样实现....
function OutputMessage($Message = NULL){
if(is_null($Message){
return;
}
else {
$arr = explode(":",$Message);
if(count($arr)>0){
return sprintf('<div class="alert alert-%s">%s</div>',strtolower($arr[0]),$arr[1]);
}
else {
return sprintf('<div class="alert alert-default">%s</div>',$Message);
}
}
}
strpos() 函数 returns 字符串的起始位置为整数,如果字符串不存在则为 FALSE。因此,您的 if else 语句永远不会命中 else 语句,因为 $Position 永远不会等于 TRUE。
交换 if 语句以检查 FALSE if($Position === FALSE)
那么您应该能够获得正确的行为。
您可以使用大于 0 的 TRUE
function OutputMessage($Message=''){
if($Message){
$Postion = strpos($Message,":");
if($Postion < 0){
return sprintf('<div class="alert alert-default">%s</div>',$Message);
}else{
$Message = explode(": ",$Message);
return sprintf('<div class="alert alert-%s">%s</div>',strtolower($Message[0]),$Message[1]);
}
}else{
return "";
}
}
试着用这个实现,
function OutputMessage($Message=''){
if(is_null($Message) || $Message === ""){ return ""; }
if(strpos($Message,":") === false){
$result = sprintf('<div class="alert alert-default">%s</div>',$Message);
}else{
$Message = explode(": ",$Message);
$result = sprintf('<div class="alert alert-%s">%s</div>',strtolower($Message[0]),$Message[1]);
}
return $result;
}
我创建了自定义函数 OutputMessage
从我插入错误消息的地方 ClassStyle
像这样 Error: image upload failed!
然后我分解字符串并拆分 class从它添加到 div class
但我的功能无法正常工作。
function OutputMessage($Message=''){
if($Message){
$Postion = strpos($Message,":");
if($Postion !== TRUE){
return sprintf('<div class="alert alert-default">%s</div>',$Message);
}else{
$Message = explode(": ",$Message);
return sprintf('<div class="alert alert-%s">%s</div>',strtolower($Message[0]),$Message[1]);
}
}else{
return "";
}
}
$Position
检查不工作,因为我传递的消息是 class 但它仍然返回默认值 class
来自manual entry of strpos() function:
Returns the position of where the needle exists relative to the beginning of the haystack string (independent of offset). Also note that string positions start at 0, and not 1.
Returns FALSE if the needle was not found.
这意味着 if($Postion !== TRUE)
将永远是 true
,因为 strpos()
永远不会 returns true
.
要使您的函数按预期工作,请将您的 if
语句更改为 if($Postion === false)
。
从 strpos 的文档中,您可以看到该函数将 NEVER
return 为真。只需在 if 语句中将其更改为 false 即可,一切正常。
为什么你不能这样实现....
function OutputMessage($Message = NULL){
if(is_null($Message){
return;
}
else {
$arr = explode(":",$Message);
if(count($arr)>0){
return sprintf('<div class="alert alert-%s">%s</div>',strtolower($arr[0]),$arr[1]);
}
else {
return sprintf('<div class="alert alert-default">%s</div>',$Message);
}
}
}
strpos() 函数 returns 字符串的起始位置为整数,如果字符串不存在则为 FALSE。因此,您的 if else 语句永远不会命中 else 语句,因为 $Position 永远不会等于 TRUE。
交换 if 语句以检查 FALSE if($Position === FALSE)
那么您应该能够获得正确的行为。
您可以使用大于 0 的 TRUE
function OutputMessage($Message=''){
if($Message){
$Postion = strpos($Message,":");
if($Postion < 0){
return sprintf('<div class="alert alert-default">%s</div>',$Message);
}else{
$Message = explode(": ",$Message);
return sprintf('<div class="alert alert-%s">%s</div>',strtolower($Message[0]),$Message[1]);
}
}else{
return "";
}
}
试着用这个实现,
function OutputMessage($Message=''){
if(is_null($Message) || $Message === ""){ return ""; }
if(strpos($Message,":") === false){
$result = sprintf('<div class="alert alert-default">%s</div>',$Message);
}else{
$Message = explode(": ",$Message);
$result = sprintf('<div class="alert alert-%s">%s</div>',strtolower($Message[0]),$Message[1]);
}
return $result;
}