无法在PHP中生成序列明智的唯一编号

时间:2018-03-08 17:26:13

标签: php codeigniter numbers

在我的代码中我有一个产品上传系统,我希望每次上传产品时都会有一个独特的产品代码。我正在使用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。 请帮我这样做。

1 个答案:

答案 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个空格,以获得最大秒数。