Php 在数组中搜索部分或完整文本
我有一个HTML搜索表单: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没有运气 对于上面
<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中)与|分开。我现在要试试你的方法。非常感谢。