我使用以下代码在WooCommerce中提取所有可用产品
$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;
现在,我尝试按照usort()
或asort()
所述的$data
函数和方法,使用当前位于购物车中的产品ID对这些产品进行排序。here。当我删除排序代码并显示$data
数组时,一切正常。
编辑: {{1}}数组包含与产品ID相关的密钥,可能有助于根据购物车内的内容按另一个产品ID数组进行排序。
任何提示我做错了什么?
答案 0 :(得分: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 :(得分:-1)
您拥有$data
阵列,其中包含$product->id
个密钥。因此你不能搜索$ 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;
}
}
}