PHP - 在while循环中获取唯一值

I have the following code:-

if( $featured_query->have_posts() ): $property_increment = 0;
    while( $featured_query->have_posts() ) : $featured_query->the_post(); 

        $town = get_field('house_town');
        $a = array($town);
        $b = array_unique($a);
        sort($b);

        var_dump($b);

    $property_increment++; endwhile; ?>
<?php endif; wp_reset_query();

var_dump(b) shows:-

array(1) { [0]=> string(10) "Nottingham" } array(1) { [0]=> string(9) "Leicester" } array(1) { [0]=> string(9) "Leicester" } array(1) { [0]=> string(11) "Mountsorrel" } array(1) { [0]=> string(12) "Loughborough" } array(1) { [0]=> string(12) "Loughborough" }

var_dump($town) shows:-

string(10) "Nottingham" string(9) "Leicester" string(9) "Leicester" string(11) "Mountsorrel" string(12) "Loughborough" string(12) "Loughborough"

var_dump($a) shows:-

array(1) { [0]=> string(10) "Nottingham" } array(1) { [0]=> string(9) "Leicester" } array(1) { [0]=> string(9) "Leicester" } array(1) { [0]=> string(11) "Mountsorrel" } array(1) { [0]=> string(12) "Loughborough" } array(1) { [0]=> string(12) "Loughborough" }

What I want to do is get the unique vales of $town and output them into a select option:-

 <select>
     <option value="Leicester">Leicester</option>';
     <option value="Loughborough">Loughborough</option>';
     <option value="Mountsorrel">Mountsorrel</option>';
 </select>';

In alpha as above, any help would be much appreciated.

Your array needs to be un-nested with array_column before you sort it and make it unique. So after you initialised $a, continue like this:

$b = array_unique(array_column($a, 0));
sort($b);

and then make the HTML:

$html = "";
foreach($b as $town)  {
    $html .= "<option value='$town'>$town</option>";
}
echo  "<select>$html</select>";

If you don't have array_column, then you can use this replacement:

function array_column($arr, $column) {
    $res = array();
    foreach ($arr as $el) {
        $res[] = $el[$column];
    }
    return $res;
}
 #collect all get_field('house_town') in while
 $collect[] = get_field('house_town');

 #then do the work
 $html = implode('',
           array_map(
               function($a){
                    return "<option value='{$a}'>{$a}</option>";
               },
               array_unique($collect)
             )
         );

Here's a summary of Chris G's comment and trincot's code snippet for generating the HTML code.

Note: for testing purposes I have created the $town array manually here. Replace it by your statement $town = get_field('house_town');

<?php
$town = array(
    "Nottingham",
    "Leicester",
    "Leicester",
    "Mountsorrel",
    "Loughborough",
    "Loughborough"
);

// $town = get_field('house_town');

$html = "";
$town = array_unique($town);
sort($town);
foreach($town as $xtown) {
    $html .= "<option value='$xtown'>$xtown</option>";
}
echo  "<select>$html</select>";
?>