我试图将来自用户的高级自定义字段数据与某些post数据进行比较。基本上,我有一个用户“radio”字段(带有一个值),用户可以在其中选择操作系统(如Windows、Linux…)。根据类型,他们还可以选择特定的操作系统版本(如其他字段上的Windows 10)。我还有一个post字段,在这里我可以选择多个OS版本(在我的情况下,游戏支持这些版本)。例如,字段及其保存的值:
用户操作系统类型:“windows”用户操作系统版本:“10”Post multi-select操作系统:“array(\'windows-7\',\'mac-OS-10.07\',\'linux-Ubto-16.04”)”
因此,现在要检查用户操作系统是否支持Post操作系统-首先,我要检查用户是否安装了正确的操作系统。使用此代码可以执行以下操作:
$field_os = array(\'windows-7\',\'mac-os-10.07\',\'linux-ubunto-16.04\');
$user_os_type = "windows";
if (strpos($field_os, $user_os_type) !== false) {
echo "It turns true because it found the word \'windows\' in the array";
}
但在第二步中,我还必须检查用户是否使用了正确的操作系统版本。这有点棘手,因为:在本例中,所需的os版本是
at least “windows-7”,所以我可以使用操作系统版本:“10”。但是你看,我必须从数组中筛选出正确的操作系统类型,然后从数组中删除前缀“windows”。这样我就可以比较这样的数字:
$value = \'10\'; if($value >=7) {
echo "You have the right windows version";
}
编辑:
问题是,如何找到这个字符串$user_os_type = "windows"
在ACF multi-select字段中,并将类似的匹配项(在本例中应为“windows-7”)存储在变量中。
编辑:
我现在使用这段代码是因为另一段代码没有进行应有的搜索。只有当“windows-7”放在首位时,它才起作用。
$input = $user_os_type; // search for this string
$words = $os_array[\'value\']; // word array as source of comparison
$shortest = -1;
foreach ($words as $word) { $lev = levenshtein($input, $word);
if ($lev == 0) { $match = $word; $shortest = 0; break; }
if ($lev <= $shortest || $shortest < 0) {
$match_os = $word; $match_os = preg_replace(\'/[^0-9\\.]/\',\'\',$match_os);
$shortest = $lev;
} }