【问题标题】:Sort results from high to low float array - wordpress从高到低浮点数组排序结果 - wordpress
【发布时间】:2025-05-15 03:30:01
【问题描述】:

也许这应该很容易,但我对如何以一种好的方式对这些数据进行排序有点迷茫。

我在 WordPress 模板中得到了这个查询来获取一些 post_meta:

                        $args = array( 
                        'post_type' => 'page',
                        'fields' => 'ids',
                        'nopaging' => true,
                        'meta_query' => array(
                        array(
                            'key' => '_wp_page_template',
                            'value' => array('page-provider.php'),
                            'compare' => 'IN',
                        ),
                            'prijs_sort' => array(
                                'key' => 'rwp_user_score',
                                'type' => 'DECIMAL(10,2)',
                                'compare' => 'EXISTS'
                            ),
                        ),

                    );

通过我从该查询中获得的数据获得更多信息,我希望最终结果从高到低排序。

                $pages = get_posts( $args );
                foreach ( $pages as $page ) {
                    $get_average_score = get_post_meta( $page, 'rwp_user_score', true );
                    $gemiddelde_score = round($get_average_score, 1);

                    $get_review_count = get_post_meta( $page, $key = 'rwp_rating_0' , $single = false);
                    $get_review_count_aantal = array_count_values(array_column($get_review_count, 'rating_post_id'))[$page];

                    $name_provider = get_post_meta( $page, 'bedrijfsnaam_hosting_provider', false );
                    $gemiddeld_totaal = $gemiddelde_score * $get_review_count_aantal / 100;
                    echo implode(', ', $name_provider);
                    echo $gemiddeld_totaal;
                    var_dump($gemiddeld_totaal);
                    echo "<br/>";
                }
                wp_reset_postdata();

我得到了$name_provider;$gemiddeld_totaal;,我希望结果按$gemiddeld_totaal; 从高到低排序。我尝试了很多东西,但到目前为止没有运气。它是一个浮点数组,由于某种原因我无法对结果进行排序。

这是$gemiddeld_totaal;的var_dump的一部分:

Page_title_1 0.05float(0.05) 
Page_title_2 0.784float(0.784) 
Page_title_3 0.144float(0.144) 
Page_title_4 0.066float(0.066) 
Page_title_5 0.048float(0.048) 
Page_title_6 0.048float(0.048) 

如何按$gemiddeld_totaal; 对结果进行排序?而字段$name_provider;也应该按照$gemiddeld_totaal;的排序来排序。

编辑 结果应如下所示:

Name provider 1  - Average Total 1
Name provider 2  - Average Total 2
Name provider 3  - Average Total 3

编辑 2(再添加一个数据字段)foreach ( $pages as $page ) { 我得到了另一个 foreach 的输出中需要的另一个数据字段。

$shortcode = do_shortcode("[rwp_users_rating_stars id='0' post=\"$page\"]");

我尝试了一些东西,但似乎无法弄清楚如何添加它。这是 foreach 中的新行。你能解释一下怎么做吗?也许我会更好地理解它。

【问题讨论】:

    标签: php wordpress sorting arguments


    【解决方案1】:

    这样做的一种方法是使用array_multisort() 文档说:

    我们有一个行数组,但是 array_multisort() 需要一个数组 列

    $name_providers = array();
    $gemiddelden_totaal = array();
    
    foreach ( $pages as $page ) {
        $get_average_score = get_post_meta( $page, 'rwp_user_score', true );
        $gemiddelde_score = round($get_average_score, 1);
        $get_review_count = get_post_meta( $page, $key = 'rwp_rating_0' , $single = false);
        $get_review_count_aantal = array_count_values(array_column($get_review_count, 'rating_post_id'))[$page];
        $name_provider = get_post_meta( $page, 'bedrijfsnaam_hosting_provider', false );
        $gemiddeld_totaal = $gemiddelde_score * $get_review_count_aantal / 100;
        $name_providers[] = implode(', ', $name_provider); //we'll use this one as a column
        $gemiddelden_totaal[] = $gemiddeld_totaal; //we'll use this one as a column
        $data[] = array('name_provider' => implode(', ', $name_provider), 'gemiddeld_totaal' => $gemiddeld_totaal); //this one contains our rows
    }
    

    一旦你得到了那部分,你就可以对这两个数组进行排序:

    $name_providers  = array_column($data, 'name_provider');
    $gemiddelden_totaal = array_column($data, 'gemiddeld_totaal');
    array_multisort($gemiddelden_totaal, SORT_DESC, $name_providers, SORT_ASC, $data);
    

    编辑 要获得所需的结果,您可以使用以下内容:

    foreach($gemiddelden_totaal as $key => $gemiddelde){
        echo $name_providers[$key] . '  - '  . $gemiddelde;
    }
    

    【讨论】:

    • 你好彼得,非常感谢你的回答。你在做什么是有道理的,但现在我把所有的数据都整理好了。输出这些值的最佳方法是什么?因为当我尝试将 array_multisort 放入一个变量并回显它时,我得到了 1...或者这不是正确的方法吗?
    • 您好@user2812779,具体取决于您希望如何显示此信息,您可以使用implodearray_column 的组合。简单地在数组上使用 echo 是行不通的。
    • 你好 Peter M,我忘了把 $pages = get_posts( $args );回来所以这就是为什么它没有显示任何东西。好的,所以我将 array_multisort 放在一个变量中,显示 1111111111 和 var_dump 显示 1bool(true) 1bool(true) 1bool(true)。我是 array_colums 的新手,所以我真的不知道如何以正确的方式使用它,但我会尝试。谢谢
    • @user2812779 使用var_dump 查看变量是如何构造的。
    • @user2812779 你能提供更多关于预期结果的信息吗?