Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在字符串数组中剪切重复的子字符串?_Php_Arrays_String_Optimization - Fatal编程技术网

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