Php 如何在字符串数组中剪切重复的子字符串?
我有一个动态数组,看起来像:Php 如何在字符串数组中剪切重复的子字符串?,php,arrays,string,optimization,Php,Arrays,String,Optimization,我有一个动态数组,看起来像: array( "animal > hairy > dog > Médor", "animal > hairy > dog > Fido", "animal > hairy > dog > Max", "animal > hairy > cat > Scratchy", "animal > hairy > bear > badBoy" ) 如何轻松获得删除了
array(
"animal > hairy > dog > Médor",
"animal > hairy > dog > Fido",
"animal > hairy > dog > Max",
"animal > hairy > cat > Scratchy",
"animal > hairy > bear > badBoy"
)
如何轻松获得删除了类似前缀的数组?我的意思是,我想获得:
array(
"dog > Médor",
"dog > Fido",
"dog > Max",
"cat > Scratchy",
"bear > badBoy"
)
当然,有一种方法可以一个字母一个字母地比较,一个值一个值地比较,但这是一种高度复杂的解决方案(相似字母的数量*值的数量),我想这是一种更好的方法
有什么帮助吗?
谢谢,对不起,应该说得更清楚些;编辑。递归使用strrpos(字符串反向搜索)和substr 2次:
for ($i = 0; $i < $numRows; $i++) {
$Result = substr($Array[$i],0,strrpos($Array[$i], '> ')-1);
$Result = substr($Array[$i],strrpos($Result, '> ')+2);
}
for($i=0;$i<$numRows;$i++){
$Result=substr($Array[$i],0,strrpos($Array[$i],'>')-1);
$Result=substr($Array[$i],strrpos($Result,'>')+2);
}
这将为您提供想要的字符串的初始位置,然后可以很容易地获得该位置。PHP有许多内置的sting函数,preg_replace可能是最强大的函数,也是我默认使用的函数。stru_替换也会起作用。试试这个
<?php
$bigArray = array(
"animal > hairy > dog > Médor",
"animal > hairy > dog > Fido",
"animal > hairy > dog > Max",
"animal > hairy > cat > Scratchy",
"animal > hairy > bear > badBoy"
);
$numRows = count($bigArray);
echo "The number of rows is $numRows<br />";
$newArray = array();
for ($i = 0; $i < $numRows; $i++) {
$newRow = preg_replace('/animal > hairy > /', '', $bigArray[$i]);
array_push($newArray, $newRow);
}
for ($i = 0; $i < $numRows; $i++) {
echo "$newArray[$i] <br />";
}
?>
你可以构建一个Trie(),然后沿着Trie往下走,直到找到一个包含多个子节点的节点。这就是所谓的,我只称之为数据结构。这个家伙说,当然,有一种方法可以逐个字母和逐个值进行比较,但这是一种高度复杂的解决方案,这意味着他很清楚这些。他需要的是一种更简单的方法,而构建Trie则更慢。我链接的帖子旨在减少比较次数。但是如果你从未找到答案,你可以查看WizKid提供的链接,并查看Gumbo的答案,这是所有答案中最短的,可能也是最有效的。抱歉,但我们不知道“animal>hairy>”是重复的前缀。。。你的答案不能回答这个问题。无论如何,谢谢你。
The number of rows is 5
dog > Médor
dog > Fido
dog > Max
cat > Scratchy
bear > badBoy