【问题标题】:Using PHP, how do I search an array for a partial string and then display multiple sections of the array?使用 PHP,如何在数组中搜索部分字符串,然后显示数组的多个部分?
【发布时间】:2015-03-26 09:27:59
【问题描述】:

我发现我不想搜索数组键并打印它们的值,我希望搜索一个部分填充的条目,即,如果我搜索“haw”,它将返回带有 Hawthorn 的每一行,轴等在第一列。

这是我目前用于搜索的内容,如果我为这些值提供全名,它就可以正常工作(尽管我意识到它可能丑陋且效率低下)。但是,我希望能够搜索“geoff”并找到所有 geoffrey 的,然后显示他们所在行的相关部分。

我已经尝试了各种方法,将字符串转换为数组和数组转换为基于从我正在尝试的各种函数中获得的错误的字符串,但我无法解决它。这是搜索中的一个常见功能,我真的认为我错过了一些重要的东西。我是新手,我需要帮助!

最近我尝试使用“In_array”,但这也无济于事。如果有人可以排序,谢谢!

    $sitename = $_GET['sitename'];
    $upsitename = strtolower($sitename);

    $area = $_GET['area'];
    $uparea = strtolower($area);

    $postcode = $_GET['postcode'];
    $uppostcode = strtolower($postcode);

    $file = fopen("houselist.csv","r");
    ini_set('auto_detect_line_endings',TRUE);

    while ( ! feof ( $file ) ) {
        $show = fgetcsv($file);

    if(($upretailer != NULL)and( $upsitename == NULL)and($uparea == NULL)) {        
            if($show[0] == $upretailer) {
                echo "<table class='output'>
    <tr><td>$show[0] </td><td>$show[1]</td><td>$show[2]</td><td>$show[5]</td><td>$show[6]</td><td>$show[8]</td>
                            </table>";
                    }
                }

        if(($upretailer != NULL) and ($upsitename != NULL)and($uparea == NULL)) {
            if(($show[0] == $upretailer) and ($show[2] == $upsitename)) {
                echo "<table class='output'>
                                <tr><td>$show[0] </td><td>$show[1]</td><td>$show[2]</td><td>$show[5]</td><td>$show[6]</td><td>$show[8]</td>
                            </table>";
                                }
                            }

        if(($upretailer != NULL) and ($upsitename != NULL)and($uparea != NULL)) {
            if(($show[0] == $upretailer) and ($show[2] == $upsitename) and ($show[5] == $uparea)) {
                echo "<table class='output'>
                                <tr><td>$show[0] </td><td>$show[1]</td><td>$show[2]</td><td>$show[5]</td><td>$show[6]</td><td>$show[8]</td>
                            </table>";
                                }
                            }

        if(($upretailer == NULL) and ($upsitename != NULL)and($uparea != NULL)) {
            if(($show[2] == $upsitename) and ($show[5] == $uparea)) {
                echo "<table class='output'>
                                <tr><td>$show[0] </td><td>$show[1]</td><td>$show[2]</td><td>$show[5]</td><td>$show[6]</td><td>$show[8]</td>
                            </table>";
                                }
                            }

        if(($upretailer == NULL) and ($upsitename == NULL)and($uparea != NULL)) {
            if($show[5] == $uparea) {
                echo "<table class='output'>
                                <tr><td>$show[0] </td><td>$show[1]</td><td>$show[2]</td><td>$show[5]</td><td>$show[6]</td><td>$show[8]</td>
                            </table>";
                                }
                            }

        if(($upretailer == NULL) and ($upsitename != NULL)and($uparea == NULL)) {
            if($show[2] == $upsitename) {
                echo "<table class='output'>
                                <tr><td>$show[0] </td><td>$show[1]</td><td>$show[2]</td><td>$show[5]</td><td>$show[6]</td><td>$show[8]</td>
                            </table>";
                                }
                            }
        if(($upretailer != NULL) and ($upsitename == NULL)and($uparea != NULL)) {
            if(($show[0] == $u)and($show[5] == $uparea)){
                echo "<table class='output'>
                                <tr><td>$show[0] </td><td>$show[1]</td><td>$show[2]</td><td>$show[5]</td><td>$show[6]</td><td>$show[8]</td>
                            </table>";
                                }
                            }
    }
        fclose($file);
?> 

【问题讨论】:

    标签: php arrays search multidimensional-array substring


    【解决方案1】:

    在脚本开头的某处定义搜索/比较函数

    function searchString($haystack, $needle) {
        return strpos($haystack, $needle) === 0 ? true : false;
    }
    

    并在 IF 语句 f.e. 中使用它

    if(searchString($show[0], $upretailer) && searchString($show[2], $upsitename)) {
        ...
    }
    

    【讨论】:

    • 太好了,谢谢你的帮助,我今天就搞定。
    【解决方案2】:
    <?php
    
    $sitename = $_GET['sitename'];
    $upsitename = strtolower($sitename);
    
    $area = $_GET['area'];
    $uparea = strtolower($area);
    
    $postcode = $_GET['postcode'];
    $uppostcode = strtolower($postcode);
    
    $file = fopen("houselist.csv","r");
    ini_set('auto_detect_line_endings',TRUE);
    
    $i=0;
    
    while ( ! feof ( $file ) ) {
    $show = fgetcsv($file);
    
      $track="nope";
    
      foreach ($show as $val) {
    
       if (strpos($val,$upsitename) !== false)
       {
        $track="true";
        echo $upsitename . " appeared in " . $val . " on line " . $i . "</br>";
       }
       if (strpos($val,$uppostcode) !== false)
       {
        $track="true";
        echo $uppostcode . " appeared in " . $val . " on line " . $i . "</br>";
       }
       if (strpos($val,$uparea) !== false) 
       {
        $track="true";
        echo $uparea . " appeared in " . $val . " on line " . $i . "</br>";
       }
    
      }
    
      if($track=="true")
      {
      echo 
      "</br></br><table class='output'>
      <tr>
      <td>$show[0] </td>
      <td>$show[1]</td>
      <td>$show[2]</td>
      <td>$show[5]</td>
      <td>$show[6]</td>
      <td>$show[8]</td>
      </tr>
      </table>";
      }
    
    $i++;      
    }
    
    fclose($file);
    ?> 
    

    【讨论】:

    • 另外谢谢,我稍后会尝试这两个。非常感谢窥视!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    • 2012-03-03
    • 2014-06-08
    • 1970-01-01
    • 2013-04-03
    • 2022-11-19
    相关资源
    最近更新 更多