Php 从字符串数组中消除部分字符串
我可以做到这一点,我只是想知道是否有一个更优雅的解决方案比47黑客行的代码,我想出了 基本上我有一个数组(值是所述字符串的出现次数) 我希望遍历数组并消除其他数组的子字符串,以便最终结果是:Php 从字符串数组中消除部分字符串,php,arrays,string,Php,Arrays,String,我可以做到这一点,我只是想知道是否有一个更优雅的解决方案比47黑客行的代码,我想出了 基本上我有一个数组(值是所述字符串的出现次数) 我希望遍历数组并消除其他数组的子字符串,以便最终结果是: [Theresa] => 3 [Bob at the farm house] => 1 最初我是这样循环的(称这个数组为$baseTags): 我假设我正在循环数组中的每个键,如果该键出现在另一个键中,则将其取消设置。。。但似乎对我不起作用。我错过了什么明显的东西吗 先谢谢你 -H您错误地使用
[Theresa] => 3
[Bob at the farm house] => 1
最初我是这样循环的(称这个数组为$baseTags):
我假设我正在循环数组中的每个键,如果该键出现在另一个键中,则将其取消设置。。。但似乎对我不起作用。我错过了什么明显的东西吗
先谢谢你
-H您错误地使用了strpos/stripos。如果您正在搜索的字符串恰好位于“haystack”字符串的开头,例如您的
Bob
值,则它们可以返回完全有效的0
。您需要使用
if (stripos($k, $key) !== FALSE) {
unset(...);
}
如果strpos/stripos没有找到指针,它们将返回一个布尔值false,在PHP的正常弱比较规则下,该值等于/等效于0。使用比较类型和值的严格比较运算符(
==
,!==
),您将得到正确的结果。不要忘记,还需要!==false
,您需要$k!=$键
以使字符串不匹配。代码示例中存在两个问题:
“Bob”
也是“Bob”
的子字符串false
,这可能与0
相混淆,后者表示在位置0
处找到,也等于但不等于false
Array
(
[Theresa] => 3
[Bob at the farm house] => 1
)
我会死的。非常感谢。我会检查你是否正确,让我看看。根据你想要达到的目标,如果还有其他问题。有趣的是,我只是加了一句:)
if (stripos($k, $key) !== FALSE) {
unset(...);
}
$baseTags = array(
'Bob' => 2,
'Theresa' => 3,
'The farm house' => 2,
'Bob at the farm house' => 1,
);
foreach ($baseTags as $key => $count)
{
foreach ($baseTags as $k => $c)
{
if ($k === $key)
{
continue;
}
if (false !== stripos($k, $key))
{
unset($baseTags[$key]);
}
}
}
print_r($baseTags);
Array
(
[Theresa] => 3
[Bob at the farm house] => 1
)