如何使用php搜索数组

时间:2018-08-19 12:05:57

标签: php arrays

我试图为我的网站提供搜索功能,但我无法使其正常工作。 这是我的代码:

$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]

包含用户请求的信息。

谢谢

3 个答案:

答案 0 :(得分:0)

一种方法是在$array中循环数组,然后使用array_intersect。如果匹配,则从$key返回$array

foreach ($array as $key => $a) {
    if (count(array_intersect($a, $search_string)) > 0) {
        echo $key;
    }
}

Demo

答案 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);
    }
}

https://3v4l.org/b0X5W