PHP的strpos功能的多个输入?

时间:2018-11-04 19:54:00

标签: php

我尝试创建一个脚本,该脚本会自动在我的产品中添加品牌,但是我需要一种解决方案来检查100多个品牌,而不是一个:/,所以在这种情况下,我有“ $ brand ='Ray Ban';”但我需要将其替换为“ $ brand ='Ray Ban,阿迪达斯,耐克';”有人知道我该怎么办吗?

  function atkp_product_updated_callback2($product_id) {
        require_once  ATKP_PLUGIN_DIR.'/includes/atkp_product.php';
        /* Get Woocommerce Product ID*/
        $woo_product = atkp_product::get_woo_product($product_id);
        $woocommerce_product_id = $woo_product->ID;

        $name = ATKPTools::get_post_setting( $product_id, ATKP_PRODUCT_POSTTYPE.'_title');
      /* Get Brand List */
        $brand = 'Ray Ban';
      /* Check if brandname in product name */
        $brandchecker = strpos($name, $brand);
        if ($brandchecker === false) {
            /* if try another */
        } else {
            /* if true add to brand*/
             ATKPTools::check_taxonomy($woocommerce_product_id, 'store', $brand); /* Add to the Woocommerce Store Taxonmy */
        }
    }
add_action('atkp_product_updated', 'atkp_product_updated_callback2');

1 个答案:

答案 0 :(得分:1)

使用preg_match_all()和正则表达式中的or运算符,如果您将$brands作为这样的数组,则可以搜索多个指针:

<?php
$brands = ["Ray Ban", "Adidas", "Mercedes"];

function hasBrands($brands, $heystack) {
   $regex = '('.implode('|', $brands).')';
   $success = preg_match_all($regex, $heystack, $matches);
    //var_dump($success);
   return $success;
}

echo hasBrands($brands, "Lorem Ray Ban and Adidas but not BMW") . "<br>";
echo hasBrands($brands, "but not BMW") . "<br>";
echo hasBrands($brands, "Adidas or Puma?") . "<br>";

// output:
// 2
// 0
// 1

如果需要匹配的品牌,只需从函数中返回$ matches(如果没有找到,则返回一个空数组):

function getBrands($brands, $heystack) {
   $regex = '('.implode('|', $brands).')';
   $success = preg_match_all($regex, $heystack, $matches);
   return $success ? $matches[0] : [];
}

var_dump(getBrands($brands, "Lorem Ray Ban and Mercedes are in this string"));

// output:
array(2) {
  [0]=>
  string(7) "Ray Ban"
  [1]=>
  string(8) "Mercedes"
}

附录
如果只需要第一个匹配项,请从getBrands返回的数组中通过[0]访问它。您应该先检查是否确实找到了一个项目。

$foundBrands = getBrands($brands, "Lorem Adidas Mercedes BMW");
if(!empty($foundBrands)) {
    $firstBrand = $foundBrands[0];
} else {
    $firstBrand = null;
    echo "no brand found!";
}

echo $firstBrand; // Adidas