Возвращать различные значения из цикла foreach в PHP? - PullRequest
6 голосов
/ 21 февраля 2012

У меня есть цикл foreach, который echo использует каждый из типов свойств в моих результатах поиска.Код выглядит следующим образом:

<?php 
    foreach($search_results as $filter_result) {
        echo $filter_result['property_type'];
    } 
?>

Вышеприведенный код возвращает:

house house house house flat flat flat

Я хотел бы сделать что-то похожее на MySQL «отлично», но я не уверен, каксделайте это в выражении foreach.

Я хочу, чтобы приведенный выше код возвращал:

  • house
  • flat

Не повторять каждыйпункт каждый раз.Как я могу это сделать?

Ответы [ 6 ]

15 голосов
/ 21 февраля 2012

Попробуйте с:

$property_types = array();
foreach($search_results_unique as $filter_result){
    if ( in_array($filter_result['property_type'], $property_types) ) {
        continue;
    }
    $property_types[] = $filter_result['property_type'];
    echo $filter_result['property_type'];
}
4 голосов
/ 21 февраля 2012

http://php.net/manual/en/function.array-unique.php

Пример:

$input = array("a" => "green", "red", "b" => "green", "blue", "red");
$result = array_unique($input); 
print_r($result);

Array
(
    [a] => green
    [0] => red
    [1] => blue
)

Вам нужно будет немного изменить его, чтобы проверить, используя property_type часть вашего массива.

0 голосов
/ 21 февраля 2012

Я думал, что в функции in_array () есть какой-то параметр для подсчета найденных элементов.

Но его не существует.

Так что попробуйте с array_unique () .

Лучше всего продублировать массив перед циклом foreach и применить эту функцию.

0 голосов
/ 21 февраля 2012

Вы должны будете отслеживать уже отраженные значения или создать новый уникальный массив значений всех $ filter_result ['property_type'] . Но для этого потребуется еще раз перебрать этот массив для фактической печати. Так что лучше было бы отслеживать.

0 голосов
/ 21 февраля 2012
<?php 

$filter=array();
foreach($search_results as $filter_result)
   $filter[]=$filter_result['property_type'];
$filter=array_unique($filter);

print_r($filter);
?>
0 голосов
/ 21 февраля 2012

Я бы использовал здесь две петли.Один для построения массива отдельных полей property_type (вы можете использовать код в цикле, чтобы проверить, что элемент еще не существует).

Затем используйте второй цикл для перехода по массиву и echo список предметов.

...