更改数组中的值部分,只知道字符串和限制的一部分

时间:2015-03-02 02:30:03

标签: php arrays preg-replace

在我得到这个答案之前 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" 
   } ;`

如何在&amp;&amp;之后更改值的部分?在mary&&5或完全更改mary&&5mary&&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);}`

1 个答案:

答案 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从匹配结果中删除左侧的所有内容,因此名称和&&未被替换)