如何从字符串中删除单词,用逗号分隔
我想让我的用户能够添加和删除列表中的项目。 列表的格式如下:item1,item2,item3
每个项目用逗号分隔,除了最后一个项目不以一个结尾,第一个项目不以一个开头。 因此,当我的用户想要删除和物品例如item3
我需要PHP删除它和它之前的逗号。如果他们想要删除item2
我需要它也删除逗号和项目之前的逗号。如果用户想要删除item1
我需要删除项目和它后面的逗号。如何从字符串中删除单词,用逗号分隔
我不是使用一个数组,因为林存储在MySQL数据库中
这个名单是我一直试图去上班的代码。它适用于除第1项以外的每个项目,当我尝试删除item1
时,它无法找到它,因为它正在查找起始逗号而不是尾随的逗号。
$skills = 'item1,item2,item3,item4';
$skillToRemove = 'item1';
if(strpos($skills, $skillToRemove . ',') == 1)
$newSkills = str_replace(',' . $skillToRemove, '', $skills);
else
$newSkills = str_replace($skillToRemove . ',', '', $skills);
echo $newSkills;
请不要使用字符串!将您的项目放入数组中,如果需要打印,请使用implode()
。但是,只要把你的物品放入一个这样的数组:
<?php
$skills = ["item1", "item2", "item3", "item4"];
$skillToRemove = 'item1';
unset($skills[array_search($skillToRemove, $skills)]);
?>
如果你要打印清单只是这样做:
echo implode(",", $skills);
^^当你发现自己有_list_工作或_collection_的东西,你应该操纵它作为一个数组。逗号分隔的字符串应该被认为是用于表示的_output_格式,而不是数据操作或存储格式。 – 2015-04-04 19:16:58
对不起,我不应该使用数组,因为林存储在数据库中的表都表示林 – 2015-04-04 19:18:43
@JamieThirkell参见[马克·贝克的评论](http://*.com/questions/29450387/how-to-remove-word-from -string分离逐逗号/ 29450432?noredirect = 1个#comment47066792_29450450)! – Rizier123 2015-04-04 19:19:13
学会与阵列工作
$skills = 'item1,item2,item3,item4';
$skillToRemove = 'item1'
$skillArray = explode(',', $skills);
$findSkill = array_search($skillToRemove, $skillArray);
if ($findSkill !== false)
unset($skillArray[$findSkill];
$skills = implode(',', $skillArray);
抱歉,我不应该使用阵列由于IM存储在数据库 – 2015-04-04 19:17:37
Your're存储在数据库中的逗号分隔的列表列表已经指出林!!!!然后,你将有这样的问题,负载....使用数据库正确,规范的数据和数据库成为你....店逗号在数据库中分隔的列表,而你正在做很多额外的工作,为自己 – 2015-04-04 19:18:35
@JamieThirkell ^^我建议你规范你的分贝到正常化3级。 – Rizier123 2015-04-04 19:20:03
你可以使用preg_replace删除选定的技能和trim把任何剩余的逗号,用这个:
$newSkills = trim(
preg_replace("/((?<=^)|(?<=,))\\Q$skillToRemove\\E(,|$)/", "", $skills),
","
);
正则表达式解释说:
/ Begin pattern
((?<=^)|(?<=,)) Begin match with start of string (^) or comma.
The `?<=` makes sure this is will not be replaced.
\Q Begin quote skill string. Any characters between \Q and \E
including metacharacters (e.g. '+' or '.') will be treated
as literals.
$skillToRemove Match skill to remove (will be removed)
\E End of skill string quoting
(,|$) Followed by comma or end of string (will also be removed)
/ End pattern
例子:
$skills = 'item1,item2,item3,item4';
$skillToRemove = 'item4';
$newSkills = trim(
preg_replace("/((?<=^)|(?<=,))\\Q$skillToRemove\\E(,|$)/", "", $skills),
","
);
echo "Removed item4: ", $newSkills, PHP_EOL;
输出:
Removed item4: item1,item2,item3
你能告诉什么业务逻辑代表您的名单?你试图在这个字符串中存储在数据库中?它应该是标签,就像在计算器上:php,mysql,sql。在停车场或无车的地方,要不然等 – 2015-04-05 14:42:35