我有一个下面列出的标准多维数组,它将容纳我的客户常见问题解答文章。这些文章将包括每篇文章的标题,描述和各种标签。我正在尝试在我的网站上设置一个表单,访问者可以在其中搜索阵列中的任何内容。如果匹配,网站将返回与搜索到的标记匹配的文章。
我的问题。
这是我的阵列。
function get_articles_all() {
$articles = array();
$articles[0] = array(
"title" => "What port does the Cisco TSP use?",
"body" => "TAPI talks to the TAPI Service Provider (TSP) and the TSP talks to the CTI manager through port 2748.",
"tag" => array("port","cisco")
);
$articles[1] = array(
"title" => "Title of second article.",
"body" => "Body of second article. Body of second article. Body of second article. Body of second article. Body of second article. Body of second article. Body of second article. Rocky.",
"tag" => array("second","number2")
);
$articles[2] = array(
"title" => "Title of third article.",
"body" => "Body of third article. Body of third article. Body of third article. Body of third article. Body of third article. Body of third article. Body of third article. Rocky.",
"tag" => array("third","number3")
);
return $articles;
}
这是我的搜索功能。
function article_tag_search($t) {
$tagResults = array();
$all = get_articles_all();
foreach ($all as $article => $key) {
if (stripos($key,$t) !== false) {
$tagResults[] = $article;
}
}
return $tagResults;
}
以下是我用来测试代码的内容。
$test = article_tag_search("port");
echo '<pre>';
print_r($test);
echo '</pre>';
会产生以下输出。
Array
(
[0] => 0
[1] => 1
[2] => 2
)
非常感谢任何协助。
达斯汀
答案 0 :(得分:0)
您的常见问题是多页吗? (例如,每个问题在不同页面上都有一个(相当长的)答案)如果是这样,那么使用您当前正在使用的解决方案应该没问题。虽然从用户体验的角度来看,我会欣赏一个页面,其中所有问题都列在另一个下面,以及用于过滤列表的搜索输入(使用Javascript)。
如果您的常见问题解答内容不是太多,您可以通过一次AJAX调用加载它们,否则您可以“限制”#c;&#39;请求并逐渐加载它们(例如Facebook,如果我没记错的话,设置最多25个帖子一次从公共页面检索)。
关于问题2,我认为更好(更便携)的解决方案是:
function get_items_by($prop, $value) {
global $articles;
$result = array();
for ($i = 0; $i < count($articles); $i++) {
// below split in else if just for readability
if (is_array($articles[$i][$prop]) && in_array($value, $articles[$i][$prop]))
array_push($result, $i);
else if (is_string($articles[$i][$prop]) && strpos($articles[$i][$prop], $value) > -1)
array_push($result, $i);
}
return $result;
}
上面的函数将返回$prop
是(1)数组并且其中的值与$value
匹配的任何数组项的索引,或者(2){找到{1}}。
像这样使用:
$value
当然要注意,如果例如搜索部分标记也应该返回结果,则该函数需要一些自定义。
除了返回索引之外,您还可以返回项目(get_items_by('tag', 'port'); // returns [0]
get_items_by('body', 'Body of'); // returns [1,2]
),并在用户点击搜索按钮/输入时使用AJAX更新列表。 jQuery的一个例子:
(JS)
array_push($result, $articles[$i])
(PHP处理程序文件)
$('#search-button').on('click', function() {
var searchFor = $('#search-field').val();
$.ajax({
url: "your/PHPFile.php",
data: {search: searchFor}
}).done(function(data) {
var data = $.parseJSON(data);
$.each(data, function(item) {
// here you have access to each article's title, body, etc.. for output
});
});
});