按数值对数组进行排序

时间:2017-12-11 23:07:56

标签: php arrays wordpress sorting woocommerce

在WooCommerce中,我正在尝试在单个产品页面上输出相关产品列表。我可以按如下方式检索一系列相关产品:

julia> a = BandedMatrices.SymBandedMatrix(Float64,5,1)
5×5 BandedMatrices.SymBandedMatrix{Float64}:
 6.36578e-310  6.36578e-310                                          
 6.36578e-310  6.36578e-310  6.36577e-310                            
               6.36577e-310  6.36577e-310  6.36577e-310              
                             6.36577e-310  6.36577e-310  6.36578e-310
                                           6.36578e-310  6.36577e-310

julia> Base.setindex!(M::SymBandedMatrix,val,r,c) = 
         ( (a,b) = minmax(r,c) ; M.data[M.k+a-b+1,b-a+1]=val )

julia> a[1,1]=1
1

julia> a
5×5 BandedMatrices.SymBandedMatrix{Float64}:
 1.0           6.36578e-310                                          
 6.36578e-310  6.36578e-310  6.36577e-310                            
               6.36577e-310  6.36577e-310  6.36577e-310              
                             6.36577e-310  6.36577e-310  6.36578e-310
                                           6.36578e-310  6.36577e-310

但是,这会按如下方式输出数组,这似乎是一个随机顺序。

<?
// Current product ID
$currentProductId = $product->get_id();
// Related products
$relatedProducts = wc_get_related_products($currentProductId);

print_r($relatedIssues);
?>

我想按照数值从高到低排列这个数组?如果可能的话?

感谢。

2 个答案:

答案 0 :(得分:3)

有很多方法可以实现这一目标:

选项1:旧的rsort()

rsort($relatedProducts, SORT_NUMERIC);

  

注意:此函数为数组中的元素指定新键。它将删除可能已分配的任何现有密钥,而不仅仅是重新排序密钥。这在这种情况下是无关紧要的,但是当数组键对于进一步处理很重要时会破坏。

选项2:usort()

usort($relatedProducts, sort_desc);

function sort_desc( $a, $b) {
  if ( $a === $b ) {
    return 0;
  }
  return ( $a > $b ) ? -1 : 1;
}

选项3:wc_products_array_orderby()

wc_products_array_orderby( $relatedProducts, $orderby = 'id', $order = 'desc' )

您不仅可以按产品ID排序,还可以按title, date, modified (date), menu_order, price排序。

这最终会调用以下函数进行基于ID的排序,但对{&#39; desc&#39;最终输出的顺序:

array_reverse()

为什么要避免直接在单一产品页面模板上编写自定义相关产品布局?

相关产品已经上映 /** * Sort by id. * @since 3.0.0 * @param WC_Product object $a * @param WC_Product object $b * @return int */ function wc_products_array_orderby_id( $a, $b ) { if ( $a->get_id() === $b->get_id() ) { return 0; } return ( $a->get_id() < $b->get_id() ) ? -1 : 1; } 行动 woocommerce_after_single_product_summary模板 content-single-product.php功能。

在单个产品页面上修改相关产品的订单 可以使用woocommerce_output_related_products进行过滤。要么 如果您需要在模板外部(例如侧边栏),则可以使用woocommerce_output_related_products_args短代码。

要更改布局,我强烈建议您使用和自定义 来自[related_products orderby="ID"]的WooCommerce模板related.php 文件夹而不是向template\single-product添加其他代码。

脱离标准的WooCommerce / WordPress约定可能会产生代码残留,将来很难维护,调试或升级。除了其他插件,主题或您自己的自定义代码,可能想要&#39; hook&#39;进入上述功能或它的HTML输出,无法做到。

答案 1 :(得分:2)

试试这个:

usort($relatedIssues, function($a, $b) {  return ($a > $b) ? -1 : 1; });