在字符串中查找关键短语:PHP
Finding key phrases in strings: PHP
问题:我需要检查字符串中的关键短语,如果它包含这些短语,则分配给某个标签名称。
我正在与 PHP 一起使用 WordPress。
到目前为止我创建的代码是:
/* WOMENS SPORTSWEAR TAGS */
function map_womens_sportswear_tags( $tag_name ) {
$tags = array(
'Womens Tracksuit Pants' => array(
'Tracksuit Pants',
'Sweatpants',
'Shell Pants',
'Jogger Pants',
'Jogging Bottoms',
),
'Womens Tracksuit Jackets' => array(
'Tracksuit Jacket',
),
'Womens Fleece Jacket' => array(
'Fleece',
),
);
foreach( $tags as $tag => $values ) {
$current_tag = $tag; // Current tag is the name of the tag, like Womens Sports Shoe or Womens Tracksuit Pants
foreach( $values as $value ) {
if ( strtolower( $value ) == strtolower( $tag_name ) || stripos( $tag_name, $current_tag ) ) {
return $current_tag; // Returns tag name, i.e. 'Womens Sports Shoe' or 'Womens Tracksuit Pants'
break;
}
}
}
return $tag_name;
}
因此,如果字符串包含单词 Jogging Bottoms,则分配给 Womens Tracksuit Pants。为此,我使用了 stripos,但我无法使代码正常工作。
请有人指出我正确的方向,因为我是编码新手。提前谢谢了。
如果我没理解错的话,您正在搜索与传递给函数的 $tag_name
相匹配的标签。
在你的 stripos 中(如果我是对的)你有 inverted parameters:
1.字符串
2. 你要在字符串中找到的关键字
检查结果是否为 !== false
,因为仅使用一个简单的 if,结果 0(在字符串的第一次出现处)将 return 为假(See the red section in the doc) .
试试这个:
foreach( $tags as $tag => $values ) {
$current_tag = $tag; // Current tag is the name of the tag, like Womens Sports Shoe or Womens Tracksuit Pants
foreach( $values as $value ) {
if ( strtolower( $value ) == strtolower( trim($tag_name) ) || stripos( trim($tag_name), $current_tag ) ) {
return $current_tag; // Returns tag name, i.e. 'Womens Sports Shoe' or 'Womens Tracksuit Pants'
break;
}
}
}
您似乎只是在 if 语句中混淆了变量:
if ( strtolower( $value ) == strtolower( $tag_name ) || stripos( $tag_name, $current_tag ) ) {
应该是
if ( strtolower( $value ) == strtolower( $tag_name ) || stripos( $tag_name, $value ) ) {
问题:我需要检查字符串中的关键短语,如果它包含这些短语,则分配给某个标签名称。
我正在与 PHP 一起使用 WordPress。
到目前为止我创建的代码是:
/* WOMENS SPORTSWEAR TAGS */
function map_womens_sportswear_tags( $tag_name ) {
$tags = array(
'Womens Tracksuit Pants' => array(
'Tracksuit Pants',
'Sweatpants',
'Shell Pants',
'Jogger Pants',
'Jogging Bottoms',
),
'Womens Tracksuit Jackets' => array(
'Tracksuit Jacket',
),
'Womens Fleece Jacket' => array(
'Fleece',
),
);
foreach( $tags as $tag => $values ) {
$current_tag = $tag; // Current tag is the name of the tag, like Womens Sports Shoe or Womens Tracksuit Pants
foreach( $values as $value ) {
if ( strtolower( $value ) == strtolower( $tag_name ) || stripos( $tag_name, $current_tag ) ) {
return $current_tag; // Returns tag name, i.e. 'Womens Sports Shoe' or 'Womens Tracksuit Pants'
break;
}
}
}
return $tag_name;
}
因此,如果字符串包含单词 Jogging Bottoms,则分配给 Womens Tracksuit Pants。为此,我使用了 stripos,但我无法使代码正常工作。
请有人指出我正确的方向,因为我是编码新手。提前谢谢了。
如果我没理解错的话,您正在搜索与传递给函数的 $tag_name
相匹配的标签。
在你的 stripos 中(如果我是对的)你有 inverted parameters:
1.字符串
2. 你要在字符串中找到的关键字
检查结果是否为 !== false
,因为仅使用一个简单的 if,结果 0(在字符串的第一次出现处)将 return 为假(See the red section in the doc) .
试试这个:
foreach( $tags as $tag => $values ) {
$current_tag = $tag; // Current tag is the name of the tag, like Womens Sports Shoe or Womens Tracksuit Pants
foreach( $values as $value ) {
if ( strtolower( $value ) == strtolower( trim($tag_name) ) || stripos( trim($tag_name), $current_tag ) ) {
return $current_tag; // Returns tag name, i.e. 'Womens Sports Shoe' or 'Womens Tracksuit Pants'
break;
}
}
}
您似乎只是在 if 语句中混淆了变量:
if ( strtolower( $value ) == strtolower( $tag_name ) || stripos( $tag_name, $current_tag ) ) {
应该是
if ( strtolower( $value ) == strtolower( $tag_name ) || stripos( $tag_name, $value ) ) {