Php 查找数组上初始段匹配掩码的长度
给定一个具有n个值的数组,例如:Php 查找数组上初始段匹配掩码的长度,php,arrays,string,Php,Arrays,String,给定一个具有n个值的数组,例如: $arr[] = 'ABCDEFABC'; $arr[] = 'ABCDEFDEF'; $arr[] = 'ABCDEFGHI'; $arr[] = 'ABCDEFJKL'; 如何找到匹配所有(或大多数,在下面的示例中)值的初始段,在本例中为ABCDEF 编辑2:未解决,请参阅答案 更糟糕的是,考虑到以下阵列: $arr[] = 'ABCDEFABC'; $arr[] = 'ABCDEFDEF'; $arr[] = 'ABCDEFGHI'; $arr[] =
$arr[] = 'ABCDEFABC';
$arr[] = 'ABCDEFDEF';
$arr[] = 'ABCDEFGHI';
$arr[] = 'ABCDEFJKL';
如何找到匹配所有(或大多数,在下面的示例中)值的初始段,在本例中为ABCDEF
编辑2:未解决,请参阅答案
更糟糕的是,考虑到以下阵列:
$arr[] = 'ABCDEFABC';
$arr[] = 'ABCDEFDEF';
$arr[] = 'ABCDEFGHI';
$arr[] = 'ABCDEFJKL';
$arr[] = 'DEFABCABC';
$arr[] = 'DEFABCDEF';
$arr[] = 'DEFABCGHI';
$arr[] = 'DEFABCJKL';
我如何获得:
$result[] = 'ABCDEF';
$result[] = 'DEFABC';
这个很棘手。。。我试图完成的是()应用于数组的行为(“掩码”的顺序很重要,谢谢Zed)
EDIT:为了澄清一些问题,我想要的是在数组的所有值中找到同一索引中存在的所有公共字母(不确定这样做是否更容易!)。在第二个问题中,由于所有字符与其他值中的索引不匹配,我需要匹配相同初始段的最大数量(在本例中为2:ABCDEF和DEFABC)。我为第一个问题想出了一个解决方案: 编辑:童车强>
$arr = array();
// Bug: ABCDEFX
$arr[] = 'ABCDEFAXC';
$arr[] = 'ABCDEFDXF';
$arr[] = 'ABCDEFGXI';
$arr[] = 'ABCDEFJXL';
/*
$arr[] = 'ABCDEFABC';
$arr[] = 'ABCDEFDEF';
$arr[] = 'ABCDEFGHI';
$arr[] = 'ABCDEFJKL';
*/
// ABCDEF
$result = implode('', call_user_func_array('array_intersect_assoc', array_map('str_split', $arr)));
现在还剩一个…如果我理解正确,您正在尝试确定给定一组字符串的最长公共前缀集 如果将其分解,任何两个字符串之间的共享前缀可以如下所示
function longestCommonPrefix($str1, $str2) {
$minLen = min(strlen($str1), strlen($str2));
for ($i = 0; $i < $minLen; $i++) {
if ($str1[$i] != $str2[$i]) {
return substr($str1, 0, $i);
}
}
return substr($str1, 0, $minLen);
}
屈服
Array
(
[0] => ABCDEF
[1] => DEFABC
)
strspn()不是您想要的。是的,你说得对。。。在这里,面具的顺序很重要。但重要的是你抓住了重点。
$arr = array();
$arr[] = 'ABCDEFABC';
$arr[] = 'ABCDEFDEF';
$arr[] = 'ABCDEFGHI';
$arr[] = 'ABCDEFJKL';
$arr[] = 'DEFABCABC';
$arr[] = 'DEFABCDEF';
$arr[] = 'DEFABCGHI';
$arr[] = 'DEFABCJKL';
print_r(longestCommonPrefixes($arr));
Array
(
[0] => ABCDEF
[1] => DEFABC
)