【问题标题】:PHP | Add elements to the array and sort after loopPHP |向数组中添加元素并在循环后排序
【发布时间】:2020-11-10 18:08:16
【问题描述】:

我正在尝试获取一些数值,感谢:wp_get_post_terms,它为我检索了自定义分类法的子分类法,其中价格以数字形式插入其中。

目标是使用 sort 和 rsort 以决定的顺序显示价格。

但是,在恢复值时,我错误地向数组中添加元素并稍后对其进行排序

代码:

foreach ($qprice as $r)
    {
        $children = $r->term_id;
        $child_terms = get_term_children($r->term_id, 'servizi_pro');
        $all_terms   = wp_get_post_terms($r->ID, 'servizi_pro');


        foreach ( $all_terms as $term )
        {

            if (!in_array($term->term_id, $child_terms))
                continue;

            
            $price = $term->name;

            $final_price = [$price];
        }


        rsort($final_price, SORT_NUMERIC);
        foreach($final_price as $pr_f) {
            echo '<span  class="numberCircle"><span>'.str_pad($pr_f, 9).''.'€'.'</span></span>';
        }
    }

加:

  $final_price = [];
foreach ($qprice as $r)
{
    $children = $r->term_id;
    $child_terms = get_term_children($r->term_id, 'servizi_pro');
    $all_terms   = wp_get_post_terms($r->ID, 'servizi_pro');

    foreach ( $all_terms as $term )
    {
        if (!in_array($term->term_id, $child_terms))
            continue;

        $price = $term->name;
        $final_price[] = $price;
    }
}

sort($final_price, SORT_NUMERIC);
foreach($final_price as $pr_f) {
    echo '<span  class="numberCircle"><span>'.str_pad($pr_f, 9).'€'.'</span></span>';
}

【问题讨论】:

    标签: php arrays sorting


    【解决方案1】:

    您需要在内部foreach 循环之前初始化$final_price 数组,并将其推入数组,而不是每次循环都替换它。

    foreach ($qprice as $r)
    {
        $children = $r->term_id;
        $child_terms = get_term_children($r->term_id, 'servizi_pro');
        $all_terms   = wp_get_post_terms($r->ID, 'servizi_pro');
    
        $final_price = [];
        foreach ( $all_terms as $term )
        {
    
            if (!in_array($term->term_id, $child_terms))
                continue;
    
            $price = $term->name;
            $final_price[] = $price;
        }
    
        rsort($final_price, SORT_NUMERIC);
        foreach($final_price as $pr_f) {
            echo '<span  class="numberCircle"><span>'.str_pad($pr_f, 9).''.'€'.'</span></span>';
        }
    }
    

    【讨论】:

    • 完美!但是如果我将指令从 rsort 更改为 sort ,它就不会像 sort 那样对它们进行排序,为什么?
    • 这应该对它们进行排序,只是以相反的顺序。
    • 是的,是的,我可能写错了,您的代码功能完善,我感谢您显然 rsort 给了我从最昂贵的价格到最便宜的价格,但是用 sort 替换您的 rsort 代码,它确实不是从最低价到最高价,我想知道为什么
    • 我想不出为什么会发生这种情况。你保留SORT_NUMERIC了吗?
    • 是:排序($final_price,SORT_NUMERIC); foreach($final_price as $pr_f) { echo ''.str_pad($pr_f, 9).''.'€'.''; }
    猜你喜欢
    • 1970-01-01
    • 2011-03-07
    • 2020-03-20
    • 2021-01-18
    • 1970-01-01
    • 1970-01-01
    • 2012-06-03
    • 2011-02-19
    • 1970-01-01
    相关资源
    最近更新 更多