如何在字符串数组中剪切重复的子串?

时间:2014-05-22 00:32:00

标签: 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(
  "dog > Médor",
  "dog > Fido",
  "dog > Max",
  "cat > Scratchy",
  "bear > badBoy"
)

当然,有一种方法可以逐字逐句地比较,但是它是一种高复杂度的解决方案(相似字母的数量*值的数量),我想它存在更好的方法...... < / p>

有任何帮助吗? 谢谢,

2 个答案:

答案 0 :(得分:0)

对不起,应该更明确;编辑。使用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);    
}

这将为您提供所需字符串的初始位置,然后可以轻松获取。

答案 1 :(得分:0)

PHP有很多内置的sting函数,preg_replace可能是最强大的,也是我默认使用的。 str_replace也可以。试试这个。

<?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 />";
}

?>

这是输出

The number of rows is 5
dog > Médor 
dog > Fido 
dog > Max 
cat > Scratchy 
bear > badBoy