【问题标题】:How to cut repetitive substrings in an array of strings? [duplicate]如何在字符串数组中剪切重复的子字符串? [复制]
【发布时间】:2014-05-22 22:39:54
【问题描述】:

我有一个动态数组,看起来像:

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"
)

当然,有一种方法可以逐个字母和逐个值进行比较,但它是一个高度复杂的解决方案(相似字母的数量 * 值的数量),我想它存在更好的方法来做到这一点......

有什么帮助吗? 谢谢,

【问题讨论】:

  • 您可以构建一个 Trie (en.wikipedia.org/wiki/Trie),然后沿着 Trie 向下走,直到找到一个包含多个子节点的节点。
  • 啊啊啊原来是这么叫的,我只叫这个数据结构。
  • 这家伙说,当然,有一种方法可以逐字母比较,逐值比较,但这是一个高复杂度的解决方案,这意味着他很清楚这些。他需要的是一种更简单的方法。
  • 构建 Trie 会更慢。我链接的帖子以最大程度地减少比较次数。
  • 但如果您从未找到答案,您可以查看 WizKid 提供的链接并查看 Gumbo 的答案,这是所有答案中最短且可能最有效的答案那里

标签: php arrays string optimization


【解决方案1】:

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 

【讨论】:

  • 抱歉,但问题是我们不知道“动物 > 多毛 >” 是重复前缀...您的回答没有回答问题。无论如何,谢谢。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-27
    • 1970-01-01
    • 1970-01-01
    • 2014-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-01
    相关资源
    最近更新 更多