我有一个问题 - 希望你能提供帮助。
我的用户将输入如下字符串:
'dt', 'time_hour', 'loc', 'protocol_category', 'service_identifier', 'mcc', 'imsi', 'service_dl_bytes', 'service_ul_ bytes'
根据其他输入,我会从此列表中删除两个字段(例如,service_identifier和service_dl_bytes)
这会在字符串中留下许多迷路逗号。
我需要一些逻辑说: - 只能有一个连续的逗号 - 不应该有逗号作为最后一个字符 - 逗号,空格逗号也是不允许的
基本上,格式必须是'input','input2','input3'
任何人都可以帮助我..我尝试使用以下内容,但它并不适用于所有用例
elseif ($df3aggrequired == "YES" and $df3agg2required == "NO" ) {
#remove spaces from select statement
$df3group0v2 = str_replace($df3aggfield, '', $df3select);
#replace aggfield1 with null
$df3group1v2 = str_replace(' ', '', $df3group0v2);
#replace instances of ,, with ,
$df3group3v2 = preg_replace('/,,+/', ',', $df3group1v2);
$finalstring0df3v2 = rtrim($df3group3v2, ',');
$finalstring1df3v2 = str_replace('\'\'', '', $finalstring0df3v2);
$finalstringdf3v2 = str_replace('.,', '', $finalstring1df3v2);
$finalstringdf31v2 = str_replace(',,', ',', $finalstringdf3v2);
$finalcleanup = preg_replace('/,,+/', ',', $finalstringdf31v2);
echo"\\<br> .groupBy(";
echo "$finalcleanup";
echo ")";
答案 0 :(得分:1)
我还认为字符串替换可能会导致问题,因此类似于geoidesic的过程,此代码试图坚持使用字段作为CSV列表,并删除引号作为解码的一部分,但也放他们又回来了。
$fields = "'dt', 'time_hour', 'loc', 'protocol_category', 'service_identifier', 'mcc', 'imsi', 'service_dl_bytes', 'service_ul_ bytes'";
$removeFields = true ;
$fieldList = str_getcsv($fields, ",", "'");
if ( $removeFields == true ) {
if ( ($key = array_search('loc', $fieldList)) !== false ) {
unset ( $fieldList[$key] );
}
$fields = "'".implode("', '", $fieldList)."'";
}
echo $fields;
该示例删除了&#39; loc&#39;字段,但可以修改此字段以删除所需的任何字段。
最终输出是(假设&#39; loc&#39;被删除)......
'dt', 'time_hour', 'protocol_category', 'service_identifier', 'mcc', 'imsi', 'service_dl_bytes', 'service_ul_ bytes'
答案 1 :(得分:0)
删除流程后,无论您的字符串是什么,您都可以使用positive lookahead在其上运行一个preg_replace
:
^\s*(,\s*)*|,\s*(?=,|$)
故障:
^\s*(,\s*)*
在开头|
或,\s*(?=,|$)
匹配连续逗号或尾随的PHP代码:
$string = preg_replace('~^\s*(,\s*)*|,\s*(?=,|$)~', '', $string);
您最好在删除字词时考虑删除不需要的逗号。
答案 2 :(得分:0)
如果是逗号分隔列表,则不要使用str_replace
。首先将字符串分成逗号:
$myArray = explode(',' $myString);
然后删除你不想要的数组部分,并再次将其作为字符串:
$fieldsToDelete = ["service_identifier", "service_dl_bytes"];
$newArray = [];
foreach($myArray as $key => $value) {
if(!in_array($value, $fieldsToDelete) {
array_push($newArray, $value)
}
}
$newString = implode(',', $newArray)
答案 3 :(得分:0)
以下代码适用于您要删除的字段的index
。
与@geoidesic写的答案相同,但在字符串中使用字段索引而不是字符串匹配。
$user_input = "'dt', 'time_hour', 'loc', 'protocol_category', 'service_identifier', 'mcc', 'imsi', 'service_dl_bytes', 'service_ul_ bytes'";
$input_array = explode(',', $user_input);
// 4 = 'service_indentifier'
// 8 = 'service_ul_ bytes'
$remove_input = array(4, 8);
foreach($remove_input as $array_index) {
unset($input_array[$array_index]);
}
$parsed_input = implode(',', $input_array);
var_dump($parsed_input);
// Output: string(80) "'dt', 'time_hour', 'loc', 'protocol_category', 'mcc', 'imsi', 'service_dl_bytes'"
答案 4 :(得分:0)
您已尝试
$var = preg_replace(["/'[\s,]*,[\s,]*'/", "/^[\s,]*|[\s,]*$/"], ["', '", ""], $var);
它可以帮助!