您好我想根据用户选择的产品类型限制返回的结果,$ r [1]是带有数组的产品类型:
foreach($list as $r)
{
$row_color = ($row_count % 2) ? $color1 : $color2;
$size2 = $r[2];
echo "<tr>
<td id=\"id\"><span id=\"non_sorting_header\">" .$r[0]. "</span></td>
<td id=\"name\"><span id=\"non_sorting_header\">" .$r[1]. "</span></td>
<td id=\"speed\"><span id=\"sorting_header\">" .kMGTB2($size2). "</span></td>
<td id=\"download\"><span id=\"sorting_header\">" .$r[3]. " Gb<br />per month</span></td>
<td id=\"contract\"><span id=\"sorting_header\">1<br />month</span></td>
<td id=\"info\"><span id=\"non_sorting_header\">".$r[5]."</span></td>
<td id=\"buy\"><span id=\"non_sorting_header\">".$r[4]."<br />".$r[6]."</span></td>
</tr>";
$row_count++;
}
因此,如果用户输入'banana',那么该函数将找到数组中$ r [1]以'banana'开头的所有实例 - start是关键,因为它可能是'banana 1''banana 2'等....
我无法想出一个光滑的方式来做到这一点...任何帮助将不胜感激!
答案 0 :(得分:1)
您可以使用以下内容
function selectFromArray($prefix="", $productArray=array()) {
return array_filter($productArray,
create_function('$element',
'return (stripos($element[1],"'.$prefix.'") === 0); '));
}
用过:
$list = selectFromArray("Banana", $list);
然后继续进行页面的其余部分。
也就是说,通过WHERE
子句在sql查询中进行这种过滤通常会更好
答案 1 :(得分:0)
我不确定Jonathan's answer是否真的是最好的方法。
首先,create_function()
最好avoided。即使没有它,当使用单独的函数时,你仍然会循环遍历列表两次。首先,您遍历整个列表以对其进行过滤,然后循环遍历已过滤的列表以打印详细信息。您可以轻松地将这两者结合起来:
foreach ($list as $r)
{
if (stripos($r[1], $prefix) === 0) {
continue;
}
// as before...
}
如果这种情况变得更复杂,你当然可以把它分成一个单独的函数。