2012-02-21 193 views
5

我有一個foreach循環,迴應我的搜索結果中的每個屬性類型。代碼如下:在PHP中從foreach循環返回不同的值?

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

上面的代碼返回:

house house house house flat flat flat 

我願做類似於MySQL的「獨特」的東西,但我不知道如何做到這一點的foreach語句。

我想上面的代碼返回:

  • 房子

每次不重複每一個項目。有任何想法嗎??

回答

15

嘗試用:

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

我在這裏使用兩個循環。一個用於構建不同property_type字段的數組(您可以使用循環中的代碼來檢查項目不存在)。

然後,使用第二個循環來遍歷數組和echo項目列表。

+0

第二循環是不必要的,因爲如果在數組中找到/未找到,則可以打印或廢棄當前記錄 – giorgio 2012-02-21 12:02:33

+0

True - 儘管如果要保留陣列供以後使用,而不僅僅是打印爲屏幕,你走。 – Widor 2012-02-21 12:05:58

+0

也是如此:)選擇任何需要的,儘管單循環會稍微快一點 – giorgio 2012-02-21 12:10:31

-1
<?php 

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

print_r($filter); 
?> 
+0

'echo $ filter;'不能打印數組。 – hsz 2012-02-21 12:00:58

+0

我不太喜歡這個,除了在獲取數據時應該區分的事實之外,你只是盲目地將它添加到一個數組中,只是爲了使用array_unique。這在我看來增加了另一個症狀修復。 – 2012-02-21 12:01:32

+0

@hsz謝謝,修正 – 2012-02-21 12:01:57

0

你必須跟蹤已經迴盪值或建立所有$ filter_result [「房產類型」]的值的新的獨特的陣列。但是那樣會要求您再次遍歷該數組以實際打印。所以保持跟蹤會更好。

0

我在想有一些參數in_array()函數來獲得項目的計數。

但是不存在。

所以儘量用array_unique()

更好的方法是複製foreach循環前陣和APLY此功能。

4

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檢查。