在我得到这个答案之前
preg_replace("~(?<=$str&&).*~", '7', $str);
哪个好,但是如果在数组中我有一个类似的字符串mary&&5
和rosemary&&5
并且我想要仅更改mary&&5
并且不打扰其他数组,那么它是否可行?怎么样?
之前的问题是:
`$array = array("josh&&3", "mary&&5", "cape&&4", "doggy&&8", etc..);`
我只知道&&
之前的用户名字符串。 $str = "mary&&";
请注意,我不知道&&
我想知道数组中是否存在,如果存在,则将值更改为新的mary&&7
`$isExists = preg_replace("some","some", $array);
if ($isExists){
echo "Its exists";
} else {
echo "Not exixts"
} ;`
如何在&amp;&amp;之后更改值的部分?在mary&&5
或完全更改mary&&5
到mary&&7
,因为我事先不知道值mary&&5
?
感谢您的回答:)
`$name = "mary";
$res = "7";
$str = array("josh&&3", "mary&&5", "cape&&4", "doggy&&8","rosemary&&5");
for ($i = 0; $i < count($str); ++$i) {
$r = preg_replace("~(?<=$name).*~",$res, $str);}`
答案 0 :(得分:0)
$arr = array('josh&&3', 'mary&&5', 'cape&&4', 'doggy&&8', 'rosemary&&5');
$name = 'mary';
$number = '7';
$replacement = $name . '&&' . $number;
所以,没有正则表达式的方法:
foreach($arr as $k=>$v) {
if (explode('&&', $v)[0] === $name)
$arr[$k] = $replacement;
}
(或者您可以使用strpos($v, $name . '&&') === 0
作为条件)
正则表达式的一种方式:
$arr = preg_filter('~\A' . $name . '&&\K.*~', $number, $arr);
(其中\K
从匹配结果中删除左侧的所有内容,因此名称和&&
未被替换)