仅知道字符串的一部分并限制数组中的值的一部分

Change portion of value within an array knowing only part of string and restric

在我得到这个答案之前 preg_replace("~(?<=$str&&).*~", '7', $str);

这很好,但是如果在数组中我有一个类似的字符串 mary&&5rosemary&&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" 
   } ;`

如何更改 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);}`
$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 从匹配结果中删除左侧的所有内容,因此不会替换名称和 &&