限制数组结果返回

时间:2009-06-22 11:13:38

标签: php

您好我想根据用户选择的产品类型限制返回的结果,$ 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'等....

我无法想出一个光滑的方式来做到这一点...任何帮助将不胜感激!

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...
}

如果这种情况变得更复杂,你当然可以把它分成一个单独的函数。