【发布时间】:2019-01-08 17:24:13
【问题描述】:
我正在尝试从一个数组中生成一个唯一的随机值并将其存储在另一个数组中,这样就不能再次使用它了。
我已经设法根据元字段生成随机值,但我不确定如何使这个唯一并确保不再生成相同的值。我创建了一个空数组$tickethistory 来保存值。下次运行验证检查时是否有可能使$lottery_max_tickets 不包含$tickethistory 值?
我正在使用下面的函数返回数字和 I',当客户在 Woocommerce 中购买产品时调用它。
function add_lottery_ticket_number( $postid ) {
$tickethistory = array();
$lottery_max_tickets = get_post_meta( $postid, '_max_tickets', true );
$max_tickets = range(1, $lottery_max_tickets);
$ticketallocated = array_rand($max_tickets, 1);
$tickethistory[] = $ticketallocated;
return $ticketallocated;
}
for ( $i = 0; $i < $item_meta['_qty'][0]; $i++ ) {
add_post_meta( $product_id, '_participant_id', $order->get_user_id() );
$participants = get_post_meta( $product_id, '_lottery_participants_count', true ) ? get_post_meta( $product_id, '_lottery_participants_count', true ) : 0;
update_post_meta( $product_id, '_lottery_participants_count', intval( $participants ) + 1 );
$this->add_lottery_to_user_metafield( $product_id, $order->get_user_id() );
$ticketnumber = $this->add_lottery_ticket_number($product_id);
$log_ids[] = $this->log_participant( $product_id, $order->get_user_id(), $ticketnumber, $order_id, $item );
}
【问题讨论】:
-
你能把历史保存在
for-loop范围内吗?我的意思是 - 您希望它对于每个i或更大范围都是唯一的吗? -
嗨,大卫,我希望它对于每个 i 和更大的范围都是独一无二的。因此,当新客户购买相同的产品时,他们将无法拥有已经分配给不同客户的号码。对于个人购买,它们还需要是唯一的,因此如果它们有 10 件商品,它将生成 10 个唯一编号。这有意义吗?
-
我想我明白了 - 我的帖子回答了你的问题吗?
-
嗨大卫,我还不能测试它,但看起来它会工作。非常感谢
标签: php arrays random woocommerce