$search_string = "html documentation";
$search_string = explode(' ', $search_string);
$array = "
Array (
[0] => Array (
[0] => 404
[1] => notfound
[2] => error
)
[1] => Array (
[0] => 403
[1] => forbidden
[2] => error
)
[2] => Array (
[0] => home
)
[3] => Array (
[0] => hcjp
[1] => html
[2] => css
[3] => js
[4] => php
[5] => learning
[6] => documentation
)
[4] => Array (
[0] => about
)
[5] => Array (
[0] => search
[1] => search on no conditions
)
[6] => Array (
[0] => search
[1] => search on label
)
)
";
$search_result = in_array($search_string, $array);
print_r($search_result);
我没有得到任何输出,我的目标是要获得某种路径,例如:[3],这样我就知道:
$search_result[3]
包含用户请求的信息。
谢谢
答案 0 :(得分:0)
一种方法是在$array
中循环数组,然后使用array_intersect。如果匹配,则从$key
返回$array
foreach ($array as $key => $a) {
if (count(array_intersect($a, $search_string)) > 0) {
echo $key;
}
}
答案 1 :(得分:0)
您编写的代码存在一些问题。
explode
函数将返回一个字符串数组,即使in_array
可以将数组作为指针使用,您构建$array
的方式也会使它(如果不是不可能的话)努力工作。另外,您的$array
是一个数组数组,而不是一维数组。
以下解决方案可以满足您的要求,但是请记住,如果您的$array
包含数百个子数组,那么它将不是最有效的解决方案。
// get search term
$search_string = "html documentation";
// explode in on space => ['html', 'documentation']
$search_strings = explode(' ', $search_string);
$array = [
['404', 'not found', 'error'],
['403', 'forbidden', 'error'],
['home'],
['hcop', 'html', 'css', 'js', 'php', 'learning', 'documentation'],
...
];
// set an array that will hold your search related info
$search_result = [];
// go through the search terms i.e. html, documentation
foreach($search_strings as $term) {
// loop through your array, $key will be the index of the sub-array and $value the sub-array itself
foreach($array as $key => $value) {
// if the term is in the sub-array, set the $term as key and the $key as the value
if (in_array($term, $value)) {
$search_result[$term] = $key;
}
}
}
// Array ( [html] => 3 [documentation] => 3 )
print_r($search_result);
答案 2 :(得分:0)
您可以使用preg_grep来查看匹配项的计数是否与输入单词计数的计数相同。
$search_string = "html documentation";
$searchArr = explode(" ", $search_string);
$search_strings = "/" . implode('|', $searchArr) ."/";
$array = [
['404', 'not found', 'error'],
['403', 'forbidden', 'error'],
['home'],
['hcop', 'html', 'css', 'js', 'php', 'learning', 'documentation']
];
foreach($array as $key => $arr){
$out = preg_grep($search_strings, $arr);
if(count($out) == count($searchArr)){
echo "match in key $key!\n";
var_dump($arr);
}
}