您好,欢迎访问一九零五行业门户网

这种情况FOREACH怎么用

foreach($str as $key=>$row) { if(preg_match_all('/\b[nn][ss][kk]-\w{5}/',$sn,$match)){ $str[$key]['darfon_pn']=substr_replace($match[0][0],$row['darfon_pn'],7,2); }else{ $str[$key]['darfon_pn'] = ''; } }
以上代码只遍历了$match[0][0],如何才能遍历整个$match每个值
回复讨论(解决方案) $str[$key]['darfon_pn']=substr_replace($match[$key][0],$row['darfon_pn'],7,2);
$str[$key]['darfon_pn']=substr_replace($match[0][ $key],$row['darfon_pn'],7,2);
if(preg_match_all('/\b[nn][ss][kk]-\w{5}/',$sn,$match)) { //由于$sn是另外的变量,没有必要放在循环里多次检查 foreach($match[0] as $v) { //对于每一个匹配到的串 foreach($str as $key=>$row) { //修改$str $str[$key]['darfon_pn'] = substr_replace($v, $row['darfon_pn'],7,2); } }}else{ //否则 foreach($str as $key=>$row) { $str[$key]['darfon_pn'] = ''; //赋空值 }}

if(preg_match_all('/\b[nn][ss][kk]-\w{5}/',$sn,$match)) { //由于$sn是另外的变量,没有必要放在循环里多次检查 foreach($match[0] as $v) { //对于每一个匹配到的串 foreach($str as $key=>$row) { //修改$str $str[$key]['darfon_pn'] = substr_replace($v, $row['darfon_pn'],7,2); } }}else{ //否则 foreach($str as $key=>$row) { $str[$key]['darfon_pn'] = ''; //赋空值 }}

这样基本上是对的了,只是为何输出只替换了第一个循环到的字符串,其他都是删除了,例:nsk-34582 nsk-uus89 nsk-89234,输出为nsk-892nsk-uusnsk-345pp,我想要的是nsk-892ppnsk-uusppnsk-345pp
最初的 $str[$key]['darfon_pn'] 的内容是什么?
测试代码 $sn = 'nsk-34582 nsk-uus89 nsk-89234';preg_match_all('/\b[nn][ss][kk]-\w{5}/',$sn,$match);print_r($match[0]);$str = '________';foreach($match[0] as $v) { $str = substr_replace($v, $str,7,2); echo $str,php_eol;}


array
(
[0] => nsk-34582
[1] => nsk-uus89
[2] => nsk-89234
)
nsk-345________
nsk-uusnsk-345________
nsk-892nsk-uusnsk-345________
是你期望的吗?
最初的 $str[$key]['darfon_pn'] 的内容是什么?
测试代码 $sn = 'nsk-34582 nsk-uus89 nsk-89234';preg_match_all('/\b[nn][ss][kk]-\w{5}/',$sn,$match);print_r($match[0]);$str = '________';foreach($match[0] as $v) { $str = substr_replace($v, $str,7,2); echo $str,php_eol;}


array
(
[0] => nsk-34582
[1] => nsk-uus89
[2] => nsk-89234
)
nsk-345________
nsk-uusnsk-345________
nsk-892nsk-uusnsk-345________
是你期望的吗?
nsk-345________
nsk-uus________
nsk-892________
这个是我期望的
最初的 $str[$key]['darfon_pn'] 的内容是什么?
测试代码 $sn = 'nsk-34582 nsk-uus89 nsk-89234';preg_match_all('/\b[nn][ss][kk]-\w{5}/',$sn,$match);print_r($match[0]);$str = '________';foreach($match[0] as $v) { $str = substr_replace($v, $str,7,2); echo $str,php_eol;}


array
(
[0] => nsk-34582
[1] => nsk-uus89
[2] => nsk-89234
)
nsk-345________
nsk-uusnsk-345________
nsk-892nsk-uusnsk-345________
是你期望的吗?
nsk-345________
nsk-uus________
nsk-892________
这个是我期望的
这样呢?
function actiontest(){
$sn = 'nsk-34582 nsk-uus89 nsk-89234';
preg_match_all('/\b[nn][ss][kk]-\w{5}/',$sn,$match);
print_r($match[0]);
$str = '________';
foreach($match[0] as $v) {
$key = substr_replace($v, $str,7);
echo $key;
}
}
明白你的意思了 preg_match_all('/\b[nn][ss][kk]-\w{5}/',$sn,$match);foreach($str as $key=>$row){ if($match[0][0]){ $str[$key]['darfon_pn']=substr_replace($match[0][0],$row['darfon_pn'],7,2); array_shift($match[0]); }else{ $str[$key]['darfon_pn'] = ''; }}
无论 $str 有多少项,按匹配出的结果逐一替换,用完了就赋空值
其它类似信息

推荐信息