假设我有以下字符串:$test ='abcd.gdda<fsa>dr'
;
以下数组:$array = array('<','.');
如何找到$ array数组中元素的字符位置? (尽可能快)然后存储并删除它们(不在该特定索引处留下NULL值)?
聚苯乙烯。我知道我可以使用strpos()来检查每个元素但是会输出类似于:9,5因为'&lt;'在“。”之前搜索符号。元素,这导致函数相信'&lt;'在''之前。在字符串中。我尝试将它与sort()函数结合起来...但是我没有按预期工作...(它输出一些NULL位置......)
答案 0 :(得分:3)
适用于字符串和字符:
<?php
$test ='abcda.gdda<fsa>dr';
$array = array('<', '.', 'dr', 'a'); // not also characters but strings can be used
$pattern = array_map("preg_quote", $array);
$pattern = implode("|", $pattern);
preg_match_all("/({$pattern})/", $test, $matches, PREG_OFFSET_CAPTURE);
array_walk($matches[0], function(&$match) use (&$test)
{
$match = $match[1];
});
$test = str_replace($array, "", $test);
print_r($matches[0]); // positions
echo $test;
<强>输出强>:
Array
(
[0] => 0
[1] => 4
[2] => 5
[3] => 9
[4] => 10
[5] => 13
[6] => 15
)
bcdgddfs>
答案 1 :(得分:0)
这是一种可能的解决方案,取决于每个搜索元素是单个字符。
$array = array(',', '.', '<');
$string = 'fdsg.gsdfh<dsf<g,gsd';
$search = implode($array); $last = 0; $out = ''; $pos = array();
foreach ($array as $char) $pos[$char] = array();
while (($len = strcspn($string, $search)) !== strlen($string)) {
$last = ($pos[$string[$len]][] = $last + $len) + 1;
$out .= substr($string, 0, $len);
$string = substr($string, $len+1);
}
$out.=$string;
答案 2 :(得分:0)
找到所有位置,将它们存储在数组中:
$test = 'abcd.gdda<fsa>dr<second . 111';
$array = array('<','.');
$positions = array();
foreach ($array as $char) {
$pos = 0;
while ($pos = strpos($test, $char, $pos)) {
$positions[$char][] = $pos;
$pos += strlen($char);
}
}
print_r($positions);
echo str_replace($array, '', $test);
答案 3 :(得分:0)
strtr($str, ['<' => '', '.' => '']);
这可能会胜过其他任何东西,因为它不需要你在PHP中迭代任何东西。
答案 4 :(得分:0)
编辑:
PHP有一个inbuild函数
str_replace($array, "", $test);
原始回答:
我将如何做到这一点:
<?php
$test ='abcd.gdda<fsa>dr';
$array = array('<','.');
foreach($array as $delimiter) {
// For every delimiter explode the text into array and the recombine it
$exploded_array = explode($delimiter, $test);
$test = implode("", $exploded_array);
}
?>
有更快的方法(你将获得一些微秒),但如果你想要速度,为什么你会使用PHP :) 我大多喜欢简单。