我有这样的值数组:
^ array:2 [▼
0 => "random value1<tr>random string1</tr>random endvalue1"
1 => "random value2<tr>random string2</tr>random endvalue2"
)
]
如何将上面的维数组的值更改为如下所示:
^ array:2 [▼
0 => "random string1"
1 => "random string2"
)
]
我正在尝试使用:
$array = array_map(function($key) {
$exp = explode('<tr>', $tes);
//$exp1 = explode('</tr>', exp[1]); -from this line3 my explode cant access array
return exp;
}, $myarray);
dd($array);
我的第3行数组变成这样:
^ array:2 [▼
0 => array:2 [▼
0 => "random value1"
1 => "random string1</tr>random endvalue1"
]
1 => array:2 [▼
0 => "random value2"
1 => "random string2</tr>random endvalue2"
]
)
]
这样的情况如何改善,或者有其他更好的方法吗?
$data = [
"random value1<tr>random string1</tr>random endvalue1",
"random value2<tr>random string2</tr>random endvalue2",
];
$trim = collect($data)
->map(function (string $value) {
preg_match('/(?<=<tr>)(.*)(?=<\/tr>)/', $value, $match);
return empty($match) ? $value : $match[1];
})
->toArray();
可以通过这种方式完成,使用框架收集方法来映射值并提取所需的字符串。
因为
preg_replace()
可以被调用一次来替换所有元素,所以你可以投射你的集合 toArray()
并调用 preg_replace()
。 (演示)
var_export(
preg_replace(
'#.*<tr>(.*?)</tr>.*#',
'$1',
collect($data)->toArray()
)
);
如果您更喜欢使用
->map()
进行链接,您可以进行 n 次 preg_replace()
调用。 (演示)
var_export(
collect($data)->map(fn($v) => preg_replace('#.*<tr>(.*?)</tr>.*#', '$1', $v))
);
如果你的数据已经是一个数组并且你不需要实现任何收集方法,那么只需调用
preg_replace()
即可。 (演示)
var_export(
preg_replace('#.*<tr>(.*?)</tr>.*#', '$1', $data)
);