Php 将字符串拆分为数组,并在查询字符串中使用数组的每个项

Php 将字符串拆分为数组,并在查询字符串中使用数组的每个项,php,arrays,Php,Arrays,我已经搜索了所有关于将字符串拆分为数组的主题。但我还没有真正了解到与我的需求有关的东西 在搜索框中,用户键入任意长度的字符串(我无法说出单词的长度)。在提交时,php脚本将值收集为$q 例如: 假设$q=“用户在搜索查询中键入任意长度。” php将$q中的每个单词拆分为$stringArray,如中的(“用户”、“键入”、“输入”、“搜索”、“等”) php迭代$stringArray中的每个项,如:for(每个$stringArray作为$i) 使用数组中的每个$i运行查询,以查找匹配项并显示

我已经搜索了所有关于将字符串拆分为数组的主题。但我还没有真正了解到与我的需求有关的东西

在搜索框中,用户键入任意长度的字符串(我无法说出单词的长度)。在提交时,php脚本将值收集为$q

例如:

  • 假设
    $q=“用户在搜索查询中键入任意长度。”
  • php将
    $q
    中的每个单词拆分为
    $stringArray
    ,如
    中的(“用户”、“键入”、“输入”、“搜索”、“等”)
  • php迭代
    $stringArray
    中的每个项,如:
    for(每个$stringArray作为$i)
  • 使用数组中的每个
    $i
    运行查询,以查找匹配项并显示与任何
    $q
    匹配的所有行
  • PHP代码

    <?php
    require_once('../data/conString_mysqli.php');
    
    if(isset($_POST['services'])){$q = trim($_POST['services']);}else if(isset($_REQUEST['q'])){$q = trim($_REQUEST['q']);}
    else if(isset($_REQUEST['s'])){$s = trim($_REQUEST['q']);}else{header('Location:../home/');}
    
    ?>
    
    <?php
    
    $stringArray = explode(" ", $q);//split using spaces
    
    foreach (array($stringArray) as &$q) {  
    ?>
    
    <?php
    //run a search query here
    $search_query = mysqli_query($connect,"SELECT * FROM service_providers WHERE INSTR(pname, '".$q."') OR INSTR(bizaddr, '".$q."') OR INSTR(bizname, '".$q."') OR INSTR(bizdesc, '".$q."') OR INSTR(pmobile, '".$q."') OR INSTR(pemail, '".$q."') OR INSTR(bizcat, '".$q."') OR INSTR(pmobile, '".$q."')ORDER BY bizname");
    
        $records = mysqli_num_rows($search_query);
        if(!$records >= 1){
            die(mysql_error());//('<script type="text/javascript">alert("PROVIDERS SEARCH RESULT \n\nCould not find a match. \nTry using one word, exact words. \nYou can search by category. Just type the category name (tv repairs, air conditioning, painting, car repairs, carpentry, plumbing, tiles, rug, washing, catering, cakes, creams, computer, software, hardware etc. \n\nDo not use periods, commas, and other symbols!");window.location="test_array.php?q='.$q.'";<script>');
        }else {
            while($row = mysqli_fetch_array($search_query)){
                $pcode = $row['pcode'];
                $bizname = $row['bizname'];
                $bizaddr = $row['bizaddr'];
                $bizdesc = $row['bizdesc'];
                $pname = $row['pname'];
                $pmobile = $row['pmobile'];
                $pemail = $row['pemail'];
                if($row['bizcat'] ==''){
                    $category = "UNKNOWN CATEGORY";}
                else{$category = $row['bizcat'];}
    ?>
    <?php
                echo $pcode .'<br />';
                echo $bizname .'<br />';
                echo $bizaddr .'<br />';
                echo $bizdesc .'<br />';
                echo $category .'<br />';
                echo $pname .'<br />';
                echo $pmobile .'<br />';
                echo $pemail .'<br />';
                echo '--------------------' .'<br />';
                }
            }
    ?>
    
    <?php
    }
    ?>
    
    第17行

     foreach (array($stringArray) as &$q)
    
    删除数组,您将获得没有该错误的代码

    foreach ($stringArray as $q)
    
    此外,您可以将mysqli_fetch_数组更改为mysqli featch assoc,因为它将只获取关联数组


    您可以在$search\u查询中消除所有连接。Double-quote可以完成所有操作。

    explode()已经返回了一个数组(或者失败时返回布尔值false),那么为什么还要再次将该数组类型转换为数组呢?你真的应该考虑使用全文索引。一次全文搜索比一长串的
    instr()
    array($stringArray)
    um什么?@MarcB:他们实际上是在创建一个多维数组,这更糟糕;-)必须你…………喊?@AbraCadaver你能说大声一点吗?在我这个年龄,我很难听到和看到东西。“作为一名软件工程师、程序员和社交媒体传播者,我在国际上享有无可挑剔的声誉。”就我个人而言,我做了一个烤奶酪三明治。@Dagon当然,一旦你找到奶酪。说奶酪:好吧,@Nirpendra,我会试试你的建议。不管行不行,我都会回来。谢谢,我试过你的想法。它起作用了。非常感谢。但是仍然有一个bug。在DB表中,有几行服务提供者。例如:,,。。。在第1行,您有:,,在第2行:,,在第3行:,。挑战:如果用户使用d关键字“cleaning services,Washington”进行搜索,则查询中使用的d foreach($stringArray as$q)将返回所有带有“cleaning”和“Washington”的行,而不是在d指定位置“Washington”中仅返回带有“cleaning”的d行。我怎样才能解决这个问题?谢谢你迄今为止的帮助。
    foreach ($stringArray as $q)