在我的代码中我有一个产品上传系统,我希望每次上传产品时都会有一个独特的产品代码。我正在使用PHP CodeIgniter框架。我做了所有事情,例如年终的两位数和365天的天数,但无法生成序列号,如1865001,然后是1865002,然后是1865003。
以下是我的控制器的代码
public function view(){
$data['subview'] = 'admin/parts/user_list';
$data['title'] = 'User Overview';
$data['users'] = $this->Users_model->get_users();
//Code Generator
$this->load->helper('string');
$y= substr(date('Y'),2);
$t = date('z') + 1;
$data['codes'] = $y.$t;
$this->load->view('admin/__layout_admin.php', $data);
print_r($data['codes']);
}
目前的输出是1865年。 我希望它应该像1865001,1865002,1865003,1865004。 请帮我这样做。
答案 0 :(得分:1)
首先,数字应该是18065001,注意18到65之间的零,因为当你到达第100天时你将保持长度。 此外,你需要一个每日计数器来生成顺序部分(001,002,..),我会将该计数器存储在数据库中,这样你就可以在每次生成产品时更新,并在新的一天到来时重置它。 / p>
所以代码可能是这样的:
public function view(){
$data['subview'] = 'admin/parts/user_list';
$data['title'] = 'User Overview';
$data['users'] = $this->Users_model->get_users();
//Code Generator
$this->load->helper('string');
$y= substr(date('Y'),2);
$t = date('z') + 1;
// fill one one zero if year is less than 100
$t = 2 == strlen($t) ? '0' . $t : $t;
$counter = $this->ProductCounter_model->get_counter();
$data['codes'] = $y . $t . sprintf('%03d', $counter + 1);
$this->load->view('admin/__layout_admin.php', $data);
print_r($data['codes']);
}
因此,在$data['counter']
中,您将收到当前计数器,当您存储产品时,您应该更新数据库中的计数器。不要忘记在午夜将计数器重置为零。
如果不一定要有相关数字(001,002,003),我将使用午夜的秒数,这将简化过程并避免保存和重置计数器,并将其作为参数传递在数据中,在这种情况下,您可以更改此行:
$data['codes'] = $y . $t. sprintf('%05d', echo time() -
strtotime("today"));
从一天到86400秒,您需要5个空格,以获得最大秒数。