2012-02-21 26 views
5

Tengo un bucle foreach que muestra cada uno de los tipos de propiedad en mis resultados de búsqueda. Código es el siguiente:¿Devuelve valores distintos del bucle foreach en php?

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

Las anteriores declaraciones de código:

house house house house flat flat flat 

me gustaría hacer algo similar a la de MySQL 'distinta', pero no estoy seguro de cómo hacerlo en una instrucción foreach .

Quiero el código anterior para volver:

  • casa
  • plana

No repetir cada artículo cada vez. ¿¿Algunas ideas??

Respuesta

15

intento con:

$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

que haría uso de dos bucles aquí. Uno para construir una matriz de distintos campos property_type (puede usar el código en el ciclo para verificar que el elemento no exista).

Luego, use un segundo ciclo para recorrer la matriz y echo la lista de elementos.

+0

segundo bucle es innecesario, ya que podría simplemente imprimir u obsolar el registro actual si se encuentra/no se encuentra en la matriz – giorgio

+0

Verdadero - aunque sería útil si desea conservar la matriz para su uso posterior en lugar de imprimir solo en la pantalla anda tu. – Widor

+0

también es cierto :) elija lo que sea necesario, aunque one-loop será marginalmente más rápido – giorgio

-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;' no puede imprimir una matriz. – hsz

+0

No me gusta esta realmente, además del hecho de que la distinción se debe hacer cuando se obtienen los datos, se agrega ciegamente a una matriz solo para usar array_unique en ella. Eso es agregar otra corrección de síntomas en mi opinión. –

+0

@hsz Gracias, corregido –

0

Usted tendría que llevar un registro de valores ya se hizo eco o construir una nueva gama única de los valores de todos los $ filter_result [ 'property_type']. Pero eso requeriría entonces iterar sobre esa matriz una vez más para realmente imprimir. Así que mantener el seguimiento sería mejor.

0

Estaba pensando que había algún parámetro en la función in_array() para obtener el conteo de los elementos encontrados.

Pero no existe.

Así que trate con array_unique()

La mejor manera es duplicar la matriz antes de bucle foreach y aply esta función.

4

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

Ejemplo:

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

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

Usted tendrá que modificar ligeramente para comprobar el uso de la parte property_type de la matriz.