Php 查找数组上初始段匹配掩码的长度

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[] =

给定一个具有n个值的数组,例如:

$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
)