2012-02-21 24 views
5

Ho un ciclo foreach che echa ognuno dei tipi di proprietà nei miei risultati di ricerca. Codice è il seguente:Restituzione di valori distinti dal ciclo foreach in php?

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

Le suddette dichiarazioni di codice:

house house house house flat flat flat 

mi piacerebbe fare qualcosa di simile a mysql 'distinta', ma non sono sicuro come farlo su una dichiarazione foreach .

Voglio che il codice di cui sopra per tornare:

  • casa
  • piatto

Non ripetere ogni elemento ogni volta. Qualche idea??

risposta

15

Prova 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

userei due cicli qui. Uno per costruire una serie di distinti campi property_type (è possibile utilizzare il codice nel ciclo per verificare che l'elemento non esista già).

Quindi, utilizzare un secondo ciclo per scorrere l'array e echo l'elenco di elementi.

+0

secondo ciclo non è necessario in quanto è possibile stampare o obsoleto il record corrente se trovato/non trovato nell'array – giorgio

+0

True - anche se questo sarebbe utile se si volesse conservare l'array per un uso futuro anziché solo la stampa sullo schermo come tu vai. – Widor

+0

true :) Scegli qualunque cosa sia necessaria, sebbene un loop sia leggermente più veloce – 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;' non può stampare un array. – hsz

+0

Non mi piace davvero questo, oltre al fatto che la distinzione dovrebbe essere fatta quando si prelevano i dati, si aggiungono ciecamente ad un array solo per usare array_unique su di esso. Questa è l'aggiunta di un'altra correzione per i sintomi secondo me. –

+0

@hsz Grazie, corretto –

0

Si dovrà tenere traccia dei valori già echeggiava o costruire un nuovo array unica dei valori di tutte le $ filter_result [ 'property_type']. Ma ciò richiederebbe quindi di ripetere su quella matrice ancora una volta per stampare effettivamente. Quindi tenere traccia sarebbe meglio.

0

Stavo pensando che ci fosse qualche parametro nella funzione in_array() per ottenere il conteggio degli elementi trovati.

Ma non esiste.

in modo da provare con array_unique()

Il modo migliore è quello di duplicare la matrice prima ciclo foreach e aply questa funzione.

4

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

Esempio:

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

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

Avrete bisogno di modificare leggermente per verificare utilizzando la parte property_type dell'array.