2016-02-26 152 views
0

我用下面WooCommerce:产品排序根据产品ID

$sortingArr = $my_cart; 
$data = array(); 
$result = array(); 

    if ($wc_query->have_posts()) : 
     while ($wc_query->have_posts()) : 
     $wc_query->the_post(); 
     $product = new WC_Product(get_the_ID()); 

    $product_permalink = get_permalink(); 
    $product_title = get_the_title(); 
    $product_thumbnail_id = get_post_thumbnail_id(); 
    $product_thumbnail_url = wp_get_attachment_image_src($product_thumbnail_id, 'medium', true); 
    $product_description = apply_filters('the_content',get_the_excerpt()); 
    $product_price = $product->get_price_html(); 
    $product_cart = $product->single_add_to_cart_text(); 
    $product_id = $product->id; 

    $data[$product->id] = array(
          $product_permalink, 
          $product_title, 
          $product_thumbnail_url[0], 
          $product_description, 
          $product_price, 
          $product_cart, 
          $product_id); 

     endwhile; 
     wp_reset_postdata(); 

    //sorting 
    foreach($sortingArr as $val){ 
    $result[array_search($val, $data)] = $val; 
    } 

    foreach ($result as $value) { 
      <!-- displaying HTML output --> 
    } 
    endif; 

代码现在我想这些产品的产品ID这是目前使用usort()的车排序拉动所有可用的产品WooCommerce或asort()描述的功能和方法here。当我将删除排序代码并显示$data数组时,所有工作都正常。

编辑: $data数组具有与产品ID相关的密钥,这可以帮助根据购物车内部的产品ID排序另一个产品ID。

任何提示什么,我做错了什么?

+0

您可以包括你使用的是带有ASORT或usort未使用的代码? –

+0

@TomášNavara更新OP与分选部分 – JackTheKnife

回答

0

得到它解决

首先,我已分配键将$data产品阵列

$data[$product->id] = array(
         "permalink" => $product_permalink, 
         "title" => $product_title, 
         "thumbnail_url" => $product_thumbnail_url[0], 
         "description" => $product_description, 
         "price" => $product_price, 
         "in_cart" => $product_cart, 
         "id" => $product_id); 

正如我已经分配product_id的键$data阵列我能够用下面

$sortedProducts = []; 

foreach ($sortingArr as $id) { 
    $sortedProducts[] = $data[$id]; 
} 

一个循环,如果有人没有$data阵列与相关的密钥进行排序,但你必须它们存储在阵列内,你可以随时使用array_column重新索引您的阵列

// array_column is only available in PHP 5.5+ 
$data = array_column($data, null, 'id'); 

,然后排序使用满足如上所述。

-1

您有$product->id键阵列的$data阵列。因此,您不能搜索$ data数组,因为您的针本身必须是阵列(更确切地说是指向同一阵列)

考虑到您的代码在位置6(第7个元素)上分配了产品ID,您可以将

//sorting 
foreach($sortingArr as $val){ 
    $result[array_search($val, $data)] = $val; 
} 

// sorting 
foreach($sortingArr as $val){ 
    // $data is an array of arrays, so you must look through item in position $data[$i][6], where product ID is located in your case 
    foreach($data as $product_id => $d){ 
     // if present here 
     if(array_search($val, $d[6]) !== false){ 
      $result[$product_id] = $d; 

      // we have a match, no need to loop more 
      break; 
     } 
    } 
} 
+0

这是不正确回答我的问题,因为我期待通过钥匙从低到高 – JackTheKnife

+0

不只是排序按另一个数组的数组我发现的bug在你的代码 –

+0

确定如果该代码的工作原理应如此?在使用具有预定义5个ID的'$ sortingArray'排序仅5个产品后,我得到一个空的'$ result'数组 – JackTheKnife