仅知道字符串的一部分并限制数组中的值的一部分
Change portion of value within an array knowing only part of string and restric
在我得到这个答案之前
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"
} ;`
如何更改 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
从匹配结果中删除左侧的所有内容,因此不会替换名称和 &&
)
在我得到这个答案之前
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"
} ;`
如何更改 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
从匹配结果中删除左侧的所有内容,因此不会替换名称和 &&
)