Php 在数组中搜索部分或完整文本

Php 在数组中搜索部分或完整文本,php,foreach,Php,Foreach,我有一个HTML搜索表单: <form method="post"> <input type="text" name="term" /> <br /> <input type="submit" name="submit" value="Submit" /> </form> 我真正感兴趣的是匹配item中的第二个值(在上面的示例“test”中)和搜索词“term” 我试过数组,strpos没有运气 对于上面

我有一个HTML搜索表单:

 <form method="post">
    <input type="text" name="term" />
    <br />
    <input type="submit" name="submit" value="Submit" />
  </form>
我真正感兴趣的是匹配item中的第二个值(在上面的示例“test”中)和搜索词“term”

我试过数组,strpos没有运气


对于上面的示例,目前仅当我在搜索表单中输入准确的文本“test”时才会显示结果。例如,如果我输入“tes”,这是一个不完整的搜索短语,则不会显示任何内容。

如果我理解正确,
$item
包含您提到的数组

添加另一个
foreach
以迭代
$item
的元素,并为每个项目执行一个
strpos($item\u member,$\u POST['term'])
检查而不是
数组搜索

 <?php foreach($item as $item_member)): ?> 
 <?php    if(strpos($item_member, $_POST['term']) !== FALSE):  ?>
 <?php  // here do what you gotta do ?>
 <?php    endif;  ?>
 <?php  endforeach;  ?>
对于任何有效的测试子字符串,此检查将返回
true
(或者实际上是找到的匹配项的开始索引)-因此,如果您只需要从索引
0
开始的子字符串,您可以更改测试,而不是:
!==FALSE

==0


顺便说一下,:语法很难理解,我会修改它。

如果我理解正确,$item包含您提到的数组

添加另一个
foreach
以迭代
$item
的元素,并为每个项目执行一个
strpos($item\u member,$\u POST['term'])
检查而不是
数组搜索

 <?php foreach($item as $item_member)): ?> 
 <?php    if(strpos($item_member, $_POST['term']) !== FALSE):  ?>
 <?php  // here do what you gotta do ?>
 <?php    endif;  ?>
 <?php  endforeach;  ?>
对于任何有效的测试子字符串,此检查将返回
true
(或者实际上是找到的匹配项的开始索引)-因此,如果您只需要从索引
0
开始的子字符串,您可以更改测试,而不是:
!==FALSE

==0


顺便说一句,
语法很难理解-我会修改它。

首先,我不知道你想说什么
234 | test | 21 | 2013年7月28日| 0%| 1375026328 | 1375026328 | test)/
。这是数组0索引处的字符串吗?管道仅仅是视觉上分离阵列元素的一种方式吗

另外,你的代码也很难读,所以我没有读。也就是说,我想我明白你想做什么。假设您有一个数组,其中包含一些内容:

$arr = array(
    234,
    'test',
    'Jul 28, 2013',
    'testers',
);
假设您有一个用户输入字符串:

$input = 'tes';
我们要确定数组中是否有任何元素包含此字符串:

$matches = array();

foreach($arr as $element) {
    if (strpos("$element", $input) !== false) {
        #match found, store it
        $matches[] = $element;
    }
}

var_dump($matches);    //contains two elements, 'test', and 'testers'
变量转储的输出

array(2) {
  [0]=>
  string(4) "test"
  [1]=>
  string(7) "testers"
}

您应该能够使其适应您的特定用例。顺便说一下,
strpos
调用中
$element
周围的引号用于将其转换为字符串。我怀疑这在PHP中是必要的(我想不起来了),但以防万一……

首先,我不知道你想说什么
234 | test | 21 | 2013年7月28日| 0%| 1375026328 | 1375026328 | test)/
。这是数组0索引处的字符串吗?管道仅仅是视觉上分离阵列元素的一种方式吗

另外,你的代码也很难读,所以我没有读。也就是说,我想我明白你想做什么。假设您有一个数组,其中包含一些内容:

$arr = array(
    234,
    'test',
    'Jul 28, 2013',
    'testers',
);
假设您有一个用户输入字符串:

$input = 'tes';
我们要确定数组中是否有任何元素包含此字符串:

$matches = array();

foreach($arr as $element) {
    if (strpos("$element", $input) !== false) {
        #match found, store it
        $matches[] = $element;
    }
}

var_dump($matches);    //contains two elements, 'test', and 'testers'
变量转储的输出

array(2) {
  [0]=>
  string(4) "test"
  [1]=>
  string(7) "testers"
}

您应该能够使其适应您的特定用例。顺便说一下,
strpos
调用中
$element
周围的引号用于将其转换为字符串。我怀疑这在PHP中是必要的(我想不起来),但以防万一……

你的代码很难阅读,因为所有这些
preg\u grep()
可能会做你想做的事情-通过正则表达式搜索数组中的字符串。你的代码很难阅读所有这些
preg\u grep()
可能会执行您想要的操作-通过正则表达式搜索数组中的字符串。嗨,Alfasin,非常感谢您的帮助,它现在开始工作了!现在唯一的问题是,出于某种原因,如果我键入一个不完整的搜索词,它会显示同一条目的多个结果,例如,如果我键入“t”,它会显示3个“test”结果如果我键入“te”,它会显示2个“test”结果如果我键入“test”,它会显示1个“test”结果(正确)@scott为了弄明白这一点,我们需要看看codeHi Alfasin的新版本,非常感谢,它现在开始工作了!现在唯一的问题是,出于某种原因,如果我键入一个不完整的搜索词,它会显示同一条目的多个结果,例如,如果我键入“t”,它会显示3个“test”结果如果我键入“te”,它会显示2个“test”结果如果我键入“test”,它会显示1个“test”结果(正确)@scott为了弄清楚这一点,我们需要看到codeHi sgroves的新版本,第一位:234 | test | 21 | 2013年7月28日| 0%| 1375026328 | 1375026328 | test)/(数组$item中包含的内容)与|分开。我现在要试试你的方法。谢谢你,sgroves,第一位:234 | test | 21 | 2013年7月28日| 0%| 1375026328 | 1375026328 | test)/(包含在数组$item中)与|分开。我现在要试试你的方法。非常感谢。