之间最大的重叠我有此数组:PHP:找到多个字符串
$array = array('abc123', 'ac123', 'tbc123', '1ac123');
我想比较每个字符串,彼此找到最长公共子。在上面的例子中,结果将是c123
。
之间最大的重叠我有此数组:PHP:找到多个字符串
$array = array('abc123', 'ac123', 'tbc123', '1ac123');
我想比较每个字符串,彼此找到最长公共子。在上面的例子中,结果将是c123
。
更新
我已经完全误解了这个问题;其目的是要找到一个字符串数组之间最大的重叠:我不是在递归很大
$array = array('abc123', 'ac123', 'tbc123', '1ac123');
function overlap($a, $b)
{
if (!strlen($b)) {
return '';
}
if (strpos($a, $b) !== false) {
return $b;
}
$left = overlap($a, substr($b, 1));
$right = overlap($a, substr($b, 0, -1));
return strlen($left) > strlen($right) ? $left : $right;
}
$biggest = null;
foreach ($array as $item) {
if ($biggest === null) {
$biggest = $item;
}
if (($biggest = overlap($biggest, $item)) === '') {
break;
}
}
echo "Biggest match = $biggest\n";
,但我相信这应该工作;-)
老答案
我可能会使用preg_grep()
;它返回它发现根据您的搜索字符串匹配的数组:
$matches = preg_grep('/' . preg_quote($find, '/') . '/', $array);
或者,你可以使用array_filter()
:
$matches = array_filter($array, function($item) use ($find) {
return strpos($item, $find) !== false;
});
我需要提取值“C123”喜欢它是数组中所有字符串的最大匹配
我想这里你想要做的是然后根据字符串长度对上述输出进行排序(即最小的stri ng长度),然后取第一项:
if ($matches) {
usort($matches, function($a, $b) {
return strlen($a) - strlen($b);
});
echo current($matches); // take first one: ac123
}
让我知道如果我错了。
如果你只知道无论$find
正好一个元素匹配之后是:
$matching_keys = array_keys($array, $find, true); // could be empty array
或者:
$matching_key = array_search($find, $array, true); // could be false
或事件:
$have_value = in_array($find, $array, true);
这是定义正确的答案,我甚至不知道这个函数xD – aleation 2013-03-15 09:56:56
我觉得没有人理解我: 我有一个数组,我想从这个数组中比较每个字符串,并找到最匹配的最大子字符串数组中的字符串,所以匹配的最大子字符串的结果是“c123” – user1844923 2013-03-15 10:30:53
@ user1844923 Ahhhh!好的,那确实不是很清楚,让我考虑一下。 – 2013-03-15 10:31:33
in_array($find, $array);
返回true,如果它在数组中,但它必须是精确匹配,在你的情况下,它不会FINDE“ac123”。
,如果你想看看它是否包含字符串,那么你通过数组需要循环和使用的preg_match()或类似
我没有值“c123”,问题是如何找到它? – user1844923 2013-03-15 09:54:15
你可以使用array_filter机智h回调。
$output = array_filter ($input, function ($elem) { return false !== strpos ($elem, 'c123'); });
<?php
$array1 = array('abc123', 'ac123', 'tbc123', '1ac123');
if (in_array("c123", $array1)) {
echo "Got c123";
}
?>
你可以使用in_array这里使用http://codepad.org/nOdaajNe 或使用可以使用array_search这里使用http://codepad.org/DAC1bVCi
看它是否能帮助你..
文档链接:http://php.net/manual/en/function.array-search.php和http://www.php.net/manual/en/function.in-array.php
找什么方法?获取所有具有c123的元素 – 2013-03-15 09:52:57
作为结果你期望什么? – deceze 2013-03-15 09:53:06
你想要什么?意味着$ find存在或不存在于您的数组中,或$ find的索引... – 2013-03-15 09:53:56