我有一个HTML搜索表单:
<form method="post">
<input type="text" name="term" />
<br />
<input type="submit" name="submit" value="Submit" />
</form>
然后我有一个foreach循环来检查数组项是否包含搜索词:
<?php if (is_array($data['page'])): ?>
<?php foreach ($data['page'] as $item): ?>
<?php foreach($item as $item_member): ?>
<?php if(strpos($item_member, $_POST['term']) !== FALSE): ?>
<tr>
<?php foreach ($columns as $key => $column): ?>
<?php $key = parse_class($key); ?>
<td class="<?php echo $key['class']; ?>"><a class="cell-link"
href="<?php echo $details_link . $item[$details_id_field]; ?>">
<?php echo (!empty($item[$key['column']])) ? $item[$key['column']] : ' '; ?>
</a></td>
<?php endforeach; ?>
</tr>
<?php endif; ?>
<?php endforeach; ?>
<?php endforeach; ?>
<?php endif; ?>
这是一个更易阅读的版本
if(is_array($data['page'])){
foreach($data['page'] as $item){
if(array_search($_POST['term'], $item)){
echo "<tr>";
foreach($columns as $key => $column){
$key = parse_class($key);
echo '<td class="' . $key['class'] . '"><a class="cell-link" href="' . $details_link . $item[$details_id_field] . '">';
echo (!empty($item[$key['column']])) ? $item[$key['column']] : ' ';
echo '</a></td>';
}
echo '</tr>';
}
}
}
目前,仅当搜索字词与项目中的名称完全相同时,搜索才有效。
数组项包含以下信息:
234|test|21|Jul 28, 2013|0%|1375026328|1375026328|Test)/
我真的只对匹配项目中的第二个值感兴趣(在上面的例子“test”中搜索术语“term”
我试过in_array,strpos没有运气。
对于上面的例子,目前只有在搜索表单中输入确切的文本“test”时才会显示结果。如果我输入“tes”,例如一个不完整的搜索短语,则不显示任何内容。
答案 0 :(得分:2)
如果我理解正确$item
保存您引用的数组。
添加另一个foreach
来迭代$item
的元素,并为每个项目执行strpos($item_member, $_POST['term'])
检查,而不是array_search
:
<?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; ?>
但是,如果你已经知道你只想匹配第二个元素 - 你可以跳过这个foreach
而只是这样做:
<?php if(strpos($item[1], $_POST['term']) !== FALSE): ?>
对于任何有效的测试子字符串,此检查将返回true
(或实际上是找到的匹配的开始索引) - 因此,如果您只想要从索引{{1}开始的子字符串您可以更改测试而不是:
0
到
!== FALSE
顺便说一句,=== 0
语法难以阅读 - 我会改变它。
答案 1 :(得分:1)
首先,我不知道你想要234|test|21|Jul 28, 2013|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'
var_dump
的输出:
array(2) {
[0]=>
string(4) "test"
[1]=>
string(7) "testers"
}
您应该能够根据具体用例进行调整。顺便说一下,$element
调用中strpos
周围的引号是将它强制转换为字符串。我怀疑这在PHP中是必要的(不能回忆),但以防万一...