sprintf 在php中是一个函数,最近发现这个函数其实挺好用的,比如在拼接sql语句上
简单常用的有%u ,和%s,其中%u 是自然整数 ,包括0,1,2...
例如有一条 select * from users where user_id in (1,2,3,6,7);
而我们接受到的参数是一个 数组 [1,2,3,6,7];
我们可以这样写sql
<?php
$userIds = [1,2,3,6,7];
$sql = sprintf("select * from users where user_id in (%s)",explode($userIds));
echo $sql;die;
再举个例子,比如一个比较复杂的sql,日期如果在语句里,可能拼接起来眼都花了,可以用 sprintf
就可以方便一下,不用去看花眼拼接sql
<?php
$startDate = '1980-01-01';
$endDate = '2030-10-11';
$sql = sprintf("select relate_id as id ,title,max(a.created_at) last_report_time ,count(1) report_total_times from reports a
join archives b on a.relate_id = b.id where a.created_at > '%s' and a.created_at < '%s' and a.type = 'Article' and is_handle = 0
group by relate_id order by report_total_times desc ,last_report_time desc ",$startDate,$endDate);
echo $sql;die;
再来一个小彩蛋
php ,str_pad 这个函数可以拼接指定长度的字符串。 平时看没啥用,但是例如想格式化出时间为 00:00:00这样,可以用
例如现在有个变量是3665秒,转换为时分秒,可以这样 (可能能够省下写一些if else 哦)
<?php
$duration = 3665; //秒
$hour = floor($duration/3600);
$minute = floor(($duration - 3600* $hour)/60);
$second = floor($duration%60);
$result = sprintf("%s:%s:%s",str_pad($hour,2,"0", STR_PAD_LEFT),str_pad($minute,2,"0", STR_PAD_LEFT),str_pad($second,2,"0", STR_PAD_LEFT));
var_Dump($result);