我有一个看起来像这样的刺痛
$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个公司,位置编号各不相同,但撇号和括号是标准的。我希望有一个简单的方法来做到这一点,因为我不知道从哪里开始。提前谢谢。
答案 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)'
希望有所帮助!