Francis Alvin Tan
Francis Alvin Tan

Reputation: 1087

How to sort numbers php

currently I have this to list an array and sort them in lowest to highest but it won't, numbers are sorted to their first digit

<?php 
    $posts = get_posts(
        array(
            'post_type' => 'product',
            'meta_key' => 'size-in-feet',
            'posts_per_page' => -1,
            'order' => 'ASC'
        )
    );

    $meta_values = array();
    foreach( $posts as $post ) {
        $meta_values[] = get_post_meta( get_the_ID(), 'size-in-feet', true );
    }

    $sizearray = $meta_values;
    foreach($sizearray as $sizelist) {
        echo '<button class="button" data-filter=".'.$sizelist.'">'.$sizelist.' ft</button>';
    }

?>

and the output sorts like this

<button class="button" data-filter=".6x4">6x4 ft</button>
<button class="button" data-filter=".5x4">5x4 ft</button>
<button class="button" data-filter=".9x5">9x5 ft</button>
<button class="button" data-filter=".6x3">6x3 ft</button>
<button class="button" data-filter=".6x4">6x4 ft</button>
<button class="button" data-filter=".21x3">21x3 ft</button>
<button class="button" data-filter=".11x8">11x8 ft</button>
<button class="button" data-filter=".13x12">13x12 ft</button>
<button class="button" data-filter=".6x4">6x4 ft</button>
<button class="button" data-filter=".7x5">7x5 ft</button>
<button class="button" data-filter=".10x6">10x6 ft</button>

how can I make it to sort to like this, lowest to highest

<button class="button" data-filter=".5x4">5x4 ft</button>
<button class="button" data-filter=".6x3">6x3 ft</button>
<button class="button" data-filter=".6x4">6x4 ft</button>
<button class="button" data-filter=".6x4">6x4 ft</button>
<button class="button" data-filter=".6x4">6x4 ft</button>
<button class="button" data-filter=".7x5">7x5 ft</button>
<button class="button" data-filter=".9x5">9x5 ft</button>
<button class="button" data-filter=".10x6">10x6 ft</button>
<button class="button" data-filter=".11x8">11x8 ft</button>
<button class="button" data-filter=".13x12">13x12 ft</button>
<button class="button" data-filter=".21x3">21x3 ft</button>

Thanks

Upvotes: 1

Views: 65

Answers (1)

Francis Alvin Tan
Francis Alvin Tan

Reputation: 1087

I was able to come up with a solution

<?php 
    $posts = get_posts(
        array(
            'post_type' => 'product',
            'meta_key' => 'size-in-feet',
            'posts_per_page' => -1,
            'order' => 'ASC'
        )
    );

    $meta_values = array();
    foreach( $posts as $post ) {
        $meta_values[] = get_post_meta( get_the_ID(), 'size-in-feet', true );
    }

    $sizearray = array_unique($meta_values);
    $sizearray_sorted = natsort($sizearray);

    foreach($sizearray as $sizelist) {
        echo '<button class="button" data-filter=".'.$sizelist.'">'.$sizelist.' ft</button>';
    }
?>  

I just added the natsort() function and the order is working fine

Upvotes: 2

Related Questions