![](/img/trans.png)
[英]Getting unique values GROUPBY, DISTINCT, UNIQUE - what to choose? PHP Laravel
[英]Php getting unique distinct output
嗨,这里有这个算法的问题。
<?php
function get_all_substrings($input){
$subs = array();
$length = strlen($input);
for($i=0; $i<$length; $i++){
for($j=$i; $j<$length; $j++){
$subs[] = substr($input, $i, ($j - $i) + 1);
}
}
return $subs;
}
$subs = get_all_substrings("kikilala");
print_r($subs);
?>
它应该返回我30个独特的结果如下
'a', 'al', 'ala', 'i', 'ik', 'iki', 'ikil', 'ikila', 'ikilal', 'ikilala', 'il', 'ila', 'ilal', 'ilala', 'k', 'ki', 'kik', 'kiki', 'kikil', 'kikila', 'kikilal', 'kikilala', 'kil', 'kila', 'kilal', 'kilala', 'l', 'la', 'lal', 'lala'
但我得到了
Array ( [0] => k [1] => ki [2] => kik [3] => kiki [4] => kikil [5] => kikila [6] => kikilal [7] => kikilala [8] => i [9] => ik [10] => iki [11] => ikil [12] => ikila [13] => ikilal [14] => ikilala [15] => k [16] => ki [17] => kil [18] => kila [19] => kilal [20] => kilala [21] => i [22] => il [23] => ila [24] => ilal [25] => ilala [26] => l [27] => la [28] => lal [29] => lala [30] => a [31] => al [32] => ala [33] => l [34] => la [35] => a )
我在哪里错了? 谢谢
那是因为一些子串是重复的。 例如ki
, al
, la
等。为了解决这个问题,只需运行array_unique
。
$subs = array_unique(get_all_substrings("kikilala"));
注意: array_unique不会重置索引。 所以计算 - 数组长度 - 观察 - 最后 - 索引技巧在这里不起作用。 要重置索引,请使用array_values
。
$subs = array_values(array_unique(get_all_substrings("kikilala")));
如果你想要它排序
$subs = array_unique(get_all_substrings("kikilala"));
sort($subs);
如果你想要唯一,那么你需要检查子数组是否已经包含你要添加的条目。
例如,它将添加几个'k','i','l'和'a'字符。 因此,当需要添加新条目时,您需要搜索子数组,并且只有在它不存在时才添加它。
因为一些令牌是重复的。 尝试array_unique
你的$ subs:
$subs = array_unique($subs);
你有循环的多个问题,如果我假设你的第一/外循环是字长,第二/内循环是字位置然后这里是错误
我还添加了一个额外的条件来过滤掉substr中未完成的选择,这会导致重复。 最终代码在这里
function get_all_substrings($input) {
$subs = array();
$length = strlen($input);
for ($i=1; $i<=$length; $i++) {
for ($j=0; $j<$length; $j++) {
if ($length >= ($i + $j)) {
$subs[] = substr($input, $j, $i);
}
}
}
return $subs;
}
$subs = get_all_substrings("kikilala");
print_r($subs);
1 - 字符串长度减少1(最后位置)
2 - 每次第一次循环减1
尝试:
<?php
function get_all_substrings($input){
$subs = array();
$length = strlen($input)-1; //change this line
for($i=$length; $i>=0; $i--){ //and change this line
for($j=$i; $j<$length; $j++){
$subs[] = substr($input, $i, ($j - $i) + 1);
}
}
return $subs;
}
$subs = get_all_substrings("kikilala");
print_r($subs);
?>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.