我需要PHP中的一个函数来检查,如果一个数组值在字符串的第一个字符中,但是数组值包含不同数量的字符。
该函数还应首先检查较长的数组值,因为它应该只找到最长的数组值。
示例:
$string = 'ausspielen'; // should give 'aus' as result
$string2 = 'auseinandernehmen'; // should give 'auseinandernehmen' as result
$string3 = 'einarbeiten'; // should give 'ein' as result
$string4 = 'einherfahren'; // should give 'einher' as result
$array = ['aus','auseinander','ein','einher'];
我可以使用mb_substr($string, 0, 3);
查找前三个字符,但是如何找到不同数量的字符?
我还找到了函数strpos
,它找到字符串中第一次出现子字符串的位置,但是如何将它应用于我的问题呢?
我的目标是从数组中为字符串找到正确的值。例如,字符串'auseinandernehmen'
应该找到数组值'auseinander'
而不是'aus'
。
该函数应该检查字符串的第一个字符并将它们与数组的所有值进行比较,但是如果它找到一个更长的数组值,它应该使用它,而不是像'aus'
这样的短数字。结果应该是函数找到的最长的数组值。
答案 0 :(得分:1)
我认为线索传递$数组按其元素的长度排序,从较长的下降开始:
function Match($aString){
$array = ['auseinander','einher','aus','ein'];
foreach($array as $elem){
if (substr($aString,0,strlen($elem))==$elem) // Beginning of $aString matches element of $array
return $elem;
}
return "";
}
echo Match('ausspielen') ."\n";
echo Match('auseinandernehmen') . "\n";
echo Match('einarbeiten') . "\n";
echo Match('einherfahren') . "\n";
输出符合您的预期:
aus
auseinander
ein
einher
答案 1 :(得分:0)
首先,这是你要求了解的逻辑,所以作为建议最好自己尝试一下。
但是解决方案非常清楚:创建一个for循环,它将遍历每个字符串,使用strpos找到它的'位置,并使用此位置和mb_str来获取前n个字符。
如何选择此字符数的标准取决于您要执行的操作。您可以使用switch case或if语句来检查字符串并分别决定每个字符串应保留的内容。如果从数据库中获取这些数据,最好采用更正式的格式,以便能够更好地管理它。