比较两个字符串并生成一个包含两者组件的新字符串

时间:2014-02-27 20:37:15

标签: php

我有一个看起来像这样的刺痛

$storelist = "‘F Mart (6)’, ‘ACME (5)’, 'J/M Store (17)'";

我想通过将第一个字符串与第二个字符串(如

)进行比较来分解所选公司和位置数量
$selectedstores = "‘F Mart’, 'J/M Store";

并输出像

这样的刺痛
$selectedwithnumber = "‘F Mart (6)’, 'J/M Store (17)'"

字符串中可能有1到15个公司,位置编号各不相同,但撇号和括号是标准的。我希望有一个简单的方法来做到这一点,因为我不知道从哪里开始。提前谢谢。

2 个答案:

答案 0 :(得分:0)

您可以使用explode功能将数组拆分为部分,并使用preg_replace函数从第一个字符串中删除多个公司(带括号)。您可以在下面找到工作示例:

$storelist = "‘F Mart (6)’, ‘ACME (5)’, 'J/M Store (17)'";
$selectedstores = "‘F Mart’, 'J/M Store'";

//split second array
$selectedArray = explode(', ', $selectedstores);

$resultArray = array();
//split first array
foreach(explode(', ', $storelist) as $storeWithNumber) {
  //remove " (number)" from each part
  $store = preg_replace('/\s+\(\d+\)/', '', $storeWithNumber);
  //check if current part is on selected list
  if (in_array($store, $selectedArray)) {
    $resultArray[] = $storeWithNumber;
  }
}

$selectedwithnumber = implode(', ', $resultArray);

echo $selectedwithnumber.PHP_EOL;

结果是:

‘F Mart (6)’, 'J/M Store (17)'

答案 1 :(得分:0)

根据您的描述,这将得到您所需要的。它将您的字符串分解为数组,然后使用嵌套的foreach循环进行比较。我使用字符串函数而不是正则表达式函数,以防速度成为问题。但是,它确实要求您的主要商店字符串遵循您描述的约定。

<?php

$storelist = "'F Mart (6)', 'ACME (5)', 'J/M Store (17)'";

$selectedstores = "'F Mart', 'J/M Store'";

$stores = explode(",", $storelist);

$selected = explode(",", $selectedstores);

$newStoreList = array();

foreach($selected as $selectedStore) {
    foreach($stores as $store) {
        $s = trim( $selectedStore, "' ");
        if(strstr($store, $s)) {
            $newStoreList[] = $store;
        }
    }
}


$newStoreList = implode(",", $newStoreList);

echo $newStoreList; 

?>

这将输出:'F Mart (6)', 'J/M Store (17)'

希望有所帮助!