我知道这似乎是一个疯狂的问题,但我无法找到以下情况的最佳解决方案。
我有一系列'类别'并且每个人都有一串搜索'。这些搜索是一串逗号分隔的单词,用作strpos
以匹配类别。
类别数组的示例
$categories = [
0 => [
'category' => 'Foo',
'searches' => 'fet,cre,oho'
],
1 => [
'category' => 'Bar',
'searches' => 'lois,vreb,mon'
],
]
这是问题所在。说我有secret
这个词。如您所见,$categories
中的第一个数组searches
在字符串中包含cre
。我遇到的问题是给出一个字符串(在这个例子中是秘密')的方法是基于给定的字符串,在搜索中用逗号分隔的单词之一中有一个strpos()
然后返回类别(只能有一只猫)。
结果我正在寻找:
function findCategory($string)
{
$category = false;
// code to take the string,
// look through $categories
// find the first occurrence of a string position
// in the comma separated list of possible matches
return $category ? $category : 'Other';
}
echo findCategory('secret'); // Foo
echo findCategory('monster'); // Bar
echo findCategory('cohort'); // Foo
echo findCategory('tense'); // Other
答案 0 :(得分:2)
我不确定GrumpyCruton的答案是否会起作用,因为in_array()方法需要完全匹配而不是部分匹配。也许以下内容对您有用:
function findCategory($needle, $categories) {
foreach($categories as $category){
$searches = explode($delimiter, $category['searches']);
foreach ($searches as $search){
if(strpos($needle, $search) !== false){
return $category['category'];
}
}
}
return 'Other';
}
我实际上没有对此进行测试,但我认为这应该会让你走上正轨。
答案 1 :(得分:1)
如果我理解你的问题,那么这个功能可以帮到你。
function findCategory($needle, $categories, $delim = ",") {
//loop through every category
foreach($categories as $category) {
//split searches string into an array of strings
$searches = explode($delim, $category['searches']);
//if needle exists in array of strings, return category.
if(in_array($needle, $searches)) return $category['category'];
}
}
用例:
findCategory($needle, $categories);
您可以选择传递第3个参数作为searches
答案 2 :(得分:0)
function findCategory($word) {
global $categories;
foreach ($array as $key => $val) {
$subarray = explode(',', $val['searches']);
foreach ($subarray as $str) {
if (strpos($word, $str) !== false) {
return ($val['category']);
}
}
}
return 'Other';
}
我的函数获取带有global
类别的数组,如果需要,可以将它包含在函数本身中,同样的事情。
它遍历数组,然后通过当前['searches']
的爆炸,并尝试在作为参数传递的单词中找到当前的单词,如果成功,则返回相应类别的名称。如果函数尝试每一个字符串没有成功,'其他'而是返回。
答案 3 :(得分:0)
尝试此功能:
<?php
$categories = [
['category' => 'Foo', 'searches' => 'fet,cre,oho'],
['category' => 'Bar', 'searches' => 'lois,vreb,mon'],
];
function findCategory($string, $categories)
{
foreach($categories as $category) {
foreach(explode(',', $category['searches']) as $search) {
if (false !== strpos($string, $search)) {
return $category['category'];
}
}
}
return 'Other';
}
echo findCategory('secret', $categories) . '<br>';
echo findCategory('monster', $categories) . '<br>';
echo findCategory('cohort', $categories) . '<br>';
echo findCategory('tense', $categories) . '<br>';
<强>输出:强>
Foo
Bar
Foo
Other