2012-02-21 92 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检查。