возвращены результаты ограничения массива - PullRequest
0 голосов
/ 22 июня 2009

Привет! Я хотел бы ограничить возвращаемые результаты в зависимости от того, какой тип продукта выбирает пользователь, $ 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++; 
} 

Так что, если пользователь вводит «банан», то функция найдет все экземпляры в массиве, где $ r [1] начинается со слова «банан» - start является ключевым, поскольку это может быть «банан 1», «банан 2» и т.д ....

Я не могу найти хитрый способ сделать это ... любая помощь будет признательна!

Ответы [ 2 ]

1 голос
/ 22 июня 2009

Вы можете использовать что-то вроде следующего

function selectFromArray($prefix="", $productArray=array()) {

    return array_filter($productArray,
        create_function('$element', 
             'return (stripos($element[1],"'.$prefix.'") === 0); '));
}

Используется как:

$list = selectFromArray("Banana", $list);

затем перейдите к остальной части вашей страницы.

Тем не менее, обычно лучше выполнять такую ​​фильтрацию в SQL-запросе с помощью WHERE предложения

0 голосов
/ 22 июня 2009

Я не уверен, что ответ Джонатана действительно лучший способ сделать это.

Прежде всего, create_function() лучше всего избегать . Но даже без этого, когда вы используете для него отдельную функцию, вы все равно дважды просматриваете список. Сначала вы просматриваете весь список, чтобы отфильтровать его, а затем просматриваете отфильтрованный список, чтобы распечатать детали. Вы можете легко объединить эти два:

foreach ($list as $r)
{
    if (stripos($r[1], $prefix) === 0) {
        continue;
    }

    // as before...
}

Если это условие усложняется, вы, конечно, можете разделить его и на отдельную функцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...