Возврат различных значений из цикла foreach в php?

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

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

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

house house house house flat flat flat

Я хотел бы сделать что-то похожее на mysql 'distinct', но не уверен, как это сделать в инструкции foreach.

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

  • дома
  • квартира

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

6 ответов


попробовать с:

$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'];
}

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 часть массива.


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

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


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


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

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

с array_unique ()

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


<?php 

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

print_r($filter);
?>