从PHP中的foreach循环返回不同的值?

时间:2012-02-21 11:55:39

标签: php loops foreach distinct echo

我有一个foreach循环echo是搜索结果中的每个属性类型。代码如下:

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

上面的代码返回:

house house house house flat flat flat

我想做类似MySQL'distinct'的事情,但我不知道如何在foreach语句中做到这一点。

我想要上面的代码返回:

  • 房子

每次都不要重复每个项目。我怎么能这样做?

6 个答案:

答案 0 :(得分: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'];
}

答案 1 :(得分: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部分进行检查。

答案 2 :(得分:0)

我在这里使用两个循环。一个用于构建不同property_type字段的数组(您可以使用循环中的代码来检查该项目尚不存在)。

然后,使用第二个循环来遍历数组并echo项目列表。

答案 3 :(得分:0)

您必须跟踪已回显的值或构建所有 $ filter_result [&#39; property_type&#39;] 的值的新唯一数组。但那将需要您再次迭代该阵列以实际打印。所以保持跟踪会更好。

答案 4 :(得分:0)

我当时认为in_array()函数有一些参数来获取找到的项目的数量。

但是不存在。

请尝试使用array_unique()

更好的方法是在foreach循环之前复制数组并应用此函数。

答案 5 :(得分:-1)

<?php 

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

print_r($filter);
?>