php中整型是怎么表示的,数字格式化是什么意思?
就是把一种数据类型转为其它类型,比如将整型转为浮点型,格式化就是将几种数据统一转为一种数据,类型不同存储的长度不一样,运算时会有误差.
保留四位小数:
<td align="center"><?php echo sprintf("%.4f",$v[r][red_bag_money]/$v[r][p_sum]/10000);?></td>
还可以用 number_format() 函数
PHP如何统计指定字符串出现的次数?
php内置就有个函数可以的 翻翻php手册就能找到的
substr_count
(PHP 4, PHP 5)
substr_count — 计算字串出现的次数
说明
intsubstr_count ( string$haystack , string$needle [, int$offset = 0 [, int$length ]] )
substr_count() 返回子字符串needle 在字符串 haystack 中出现的次数。注意 needle 区分大小写。
参数haystack在此字符串中进行搜索。
needle要搜索的字符串。
offset开始计数的偏移位置。
length指定偏移位置之后的最大搜索长度。如果偏移量加上这个长度的和大于 haystack 的总长度,则打印警告信息。
返回值 该函数返回整型。
为什么php不适合做计算密集型业务?
PHP即“超文本预处理器”,是一种通用开源脚本语言。PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言。PHP独特的语法混合了C、Java、Perl以及 PHP 自创的语法。利于学习,使用广泛,主要适用于Web开发领域。
1.优点:开源 免费性 快捷性 [程序开发快,运行快,技术本身学习快]
1)跨平台,性能优越,跟Linux/Unix结合别跟Windows结合性能强45%,并且和很多免费的平台结合非常省钱,比如LAMP(Linux /Apache/Mysql/PHP)或者FAMP(FreeBSD/Apache/Mysql/PHP)结合,或者数据应用够大可以考虑换 PostgreSQL或者Oracle,支持N种数据库。(N >= 10)
2)语法简单,如果有学习C和Perl的很容易上手,并且跟ASP有部分类似。有成熟的开发工具,比如NuPHPed,或者Zend Studio等等,再Linux平台下可以使用Eclipse等等。
3)目前主流技术都支持,比如WebService、Ajax、XML等等,足够应用。
4)有比较完整的支持,比如使用ADODB或者PEAR::DB做数据库抽象层,用Smarty或者smart template做模板层,如果是PHP 5.1的话,还能够使用PDO(PHP Data Object)来访问数据库。
5)有很多成熟的框架,比如支持MVC的框架:phpMVC,支持类似ASP.net的事件驱动的框架:Prado,支持类似Ruby On Rails的快速开发的框架:Cake等等,足够满足你的应用需求。
6)PHP 5已经有成熟的面向对象体系,能够适应基本的面向对象要求。适合开发大型项目。
7)有成熟的社区来支持PHP的开发。
8)目前已经很多大型应用都是使用PHP,比如淘宝网、Yahoo、163、Sina等等大型门户,很多选用PHP来作为他们的开发语言,所以大型门户都能够选用它,我想足够能够你的使用了。
9)有很多开源的框架或开源的系统可以使用,比如比较知名的开源框架有Zend Framework、CakePHP、CodeIgniter、symfony等,开源论坛有Discuz!、Phpwind等,开源博客 WordPress,开源网店系统如Ecshop、ShopEx等,开源的SNS系统如UCHome、ThinkSNS等。
10)使用成本低 (linux apache mysql php内核)
2.缺点
1)函数命名不规范 驼峰法和下滑线,传参位置不一 你知道的
2)单线程 ; PHP本身,一直以来php就是个单进程的程序;虽然php的pthreads扩展早就有了。但是它不够稳定,运行运行着就会莫名其妙的自己挂掉;php的扩展都是C写的,这也就意味着任何一个扩展出现线程竞争资源控制问题都能让整个挂掉
3)核心异步网络不支持(当然在linux只有同步非阻塞网络模型)。却少了这个使得很难开发一个能够承受大并发的网络应用。传统的网络模型和io都阻塞的。这样基本的编程的做法就是一个进程(或者线程)响应一个用户链接请求。因此无法完成像实时网游那样需要成千上万网络连接的任务。尽管php也有Libevent、eio扩展对此算是某种程度上面的弥补,但是感觉都不是那么完善
4)只支持web开发,不方便做 .exe文件,不方便做桌面应用程序. 不方便做手机程序.
5)不适合做爬虫、自动运行脚本.科学运算项目,这语言基本构架就不适合,虽然有很多方法实现。
6)后期维护困难。后期提速空间局限性较大。
在对PHP有一个大致的认识以后,我们来了解一下为什么说PHP慢?
PHP的慢是相对于C/C++级别的语言来说,事实上,PHP语言最初的设计,就不是用来解决计算密集型的应用场景。我们可以这样粗略理解为,PHP为了提升开发效率,而牺牲了执行效率。
我们知道PHP一个很大的特点,就是弱类型特性,也就是说,我可以随意定义一个变量,然后给它随意赋值为各种类型的数据。以一个int整型数字为例子,在C语言中:
int num = 200; // 通常是4字节
但是,如果是PHP定义了一个同样的变量,实际对应的存储结构则是:
这个结构体将会占据远比C变量多得多的内存,PHP中定义方式如下:
$a = 200; //这变量将实际占用对比C变量很多倍的存储空间。
其实对PHP来说,无论存储什么类型的数据,都是用上述“通杀”的结构体实现。为了兼容PHP程序员的变量类型“乱入”,PHP做到了对开发者的友好,但是对执行引擎很残酷。单个变量内存消耗可能还不明显,一旦用到PHP的数组等,则复杂度指数上升(数组的实现是HashTable)。然后,Zend引擎执行时,将这些PHP代码编译为opcode(PHP的中间字节码,格式有点类似于汇编),由Zend引擎逐行解释执行。
无论是字符串的连接操作,还是数组的简单修改等,几乎都是“PHP程序员一句话,Zend引擎跑断腿”的节奏。因此,同样的操作,对比C来说,PHP消耗了更多的CPU和内存等系统资源。除此之外,还有内存自动回收、变量类型判断等等,都会增加系统资源的消耗。
例如,我用纯PHP实现的快速排序函数和原生sort函数,排序10000个整型数字,来做一个耗时对比,结果如下:
原生的sort耗时3.44 ms,而我们自己实现的PHP函数sort则是68.79 ms。我们发现,两者执行效率差距巨大。我的测试方式,是计算函数执行前后的时间间隔,而不是整个PHP脚本从启动到结束的时间。PHP脚本启动和关闭过程,本身有着一系列的初始化和清理工作,也会占据不少的耗时。
通常情况下,PHP执行效率的排行是:
最快的是PHP语言结构(isset、echo等),PHP语言的一部分(它们根本不是函数)。
然后比较快的就是PHP的原生和拓展函数。PHP拓展,基于Zend API之上,用C实现的功能,执行效率和C /Java是属于同一个数量级的。
真正慢的就是,我们通过PHP自己写的代码和函数。例如,假如我们使用的比较重的纯PHP实现的框架,因为框架本身的模块很多,所以,会明显拖累语言层面的执行效率,同时占据更多的内存。(国内的Yaf框架,以拓展的方式实现,因此执行效率远快于纯PHP写的框架。
在一般情况下,我们并不推荐用过PHP实现逻辑复杂计算类型的功能,尤其是Web系统流量比较大的场景下。因此,PHP程序员应该对PHP的各种原生函数和各类拓展有一个比较广泛的了解,在具体的功能实现场景中,寻求更原生的解决方案(原生接口或者拓展),而不是自己写一堆复杂的PHP代码来实现这类型功能。
如果有足够的PHP拓展开发实力,将这类型业务功能重写为一个PHP拓展,也会大幅提升代码的执行效率。这是一个非常不错的方式,也被广泛应用PHP优化中。但是,自己编写的PHP业务拓展的缺点也很明显:
拓展开发耗时比较长,需求变更的时候修改也复杂,写得不好可能会影响Web服务稳定性。(例如,在Apache的worker模式下,多线程场景下挂掉,会影响同一个进程下的其他正常子线程。如果是多线程的Web模式,编写拓展还需要支持线程安全)
拓展在PHP版本升级的时候,可能需要做额外的兼容工作。
人员变动后的维护和接手成本也比较高。
实际上,在互联网一线企业中,更常见的解决方案,并非增加PHP拓展,而用C/C 独立写一个服务server,然后PHP通过socket和服务server通信来完成业务处理,并不将PHP本身和业务耦合在一起。
不过,Web服务大部分的性能瓶颈都在网络传输和其他服务server的耗时上(例如MySQL等),PHP执行的耗时在整体耗时的占用比例非常小,所以从业务角度来说,影响可能并不明显。
mysql怎么把int4转换成date格式?
MySQL使用int类型作为事件的话,存储的是时间戳,是一个整型数字,使用的话,需要用相对应的编程语言的时间处理函数(或方法)来讲时间戳转换成相应格式的时间,例如在PHP中,使用date('Y-m-d H:i:s, 时间戳)来显示指定时间格式的时间。
java为什么经久不衰?
其实这种老生常谈的话题,没必要说来说去的,只是看到网络上有很多误导人的观点,觉得很不爽
我先澄清这些观点,再来谈谈我的见解。
观点一:“同样的代码java写的更多,而C#写的更少。那么C#的门槛更低,竞争更激烈” 我觉得能说出这种话的人,基本上还停留在普通专科院校没毕业的水平,基本没什么思考,笑笑就好。软件开发过程中多敲几行少敲几行都不是事。关键是能理解清楚需求,理解目标,用最适合的方式解决。不管C#的语法糖多么优秀,在java同样也能找到差不多的解决方案,实现效果在产品侧不会出现巨大差异。
观点二:“java是一门跨平台开发的语言,跨平台无压力” 这确实在java语言开发的初期是个优势点,但是现在早就不是了。其次,java面向的场景都是大型企业应用的场景,只要在linux或者windows server下能稳定运行即可,是不是跨平台收益不大(但也不是没有)
观点三:“现在android开发很火啊,学好了很赚钱” 这个观点和观点二有点类似。在早几年是这样的,当然现在H5也没有大规模应用。但是现在的app大多数都稳定了,而且android上很多技术都很成熟了,很多能力可以固化下来,让一些技能水平不是很高的开发人员就可以上手。现在的趋势是:一个团队有若干个,甚至只要一个移动端的开发大牛即可,大牛攻克难题,其他人打打下手,很多业务就能满足了。java现在的主要场景还是后端,尤其是大型系统。
还有其他观点暂时没想到,大家可以帮忙补充,我可以解答
那么应该怎么去看待“java如此经久不衰”这个现象呢。答:从企业的利益和生态的利益去思考这个现象你就明白了。因为个人程序员的得失短时间内是不会影响一款编程语言产品的发展的,你们再怎么难受,再怎么不愿意,企业掏钱了,轮到你说话吗?
java初期因为入门门槛低,面向对象符合当时软件工程各方面的优秀特性(在当时是算优秀的)累积了很多软件,以及开发人员。强大的基础为以后发展打下了非常夯实的基础。因为还有很多老系统是java开发的,对于企业最大的利益当然是能不动则不动,因为创新对于企业的风险是很大的。有些人会问了:现在技术发展这么快,不做改变能行吗?确实不行,2000后几年内那时候发展肯定没现在这么快。当时只要会个MVC就是大牛了。现在,呵呵。那么java如何应对技术大潮呢。
好在java的生态圈积累了大量优秀的软件。现在大型应用系统都是大规模集群、分布式的软件。想要完成这些系统,那么一些优秀的中间件是分不开的。从基础的SSH(或者SSM)/Guava等编程框架,到各种MQ组件/zookeeper/hadoop软件群/spark等大数据处理软件,都有java身影。有人会问了:这些软件不能用其他语言实现吗?当然可以!而且有可能实现的比他们还好。但是。时间是不等人的,在较短的时间内,需要开发出最适合的软件来解决企业面临的瓶颈和痛点,这批优秀的程序员选择了java,这是生态的胜利,也是相互的成就。
有了优秀前辈们的开源贡献,企业们的业务处理能力肯定是直线上升。终有一个时间点,上面说的那些优秀组件已经无法满足某个企业的需求了,那怎么办呢?答:自己造!前面说过,企业创新是要承担很大的风险的,那怎么办呢?改现有的优秀组件,让它突破我的瓶颈点就好了嘛,基于开源组件修改无疑风险最小的。
再来说说java虚拟机(当然,现在很多语言也都有这种虚拟机机制了,或者是复用jvm,想scala,groovy)。虚拟机就意味着,程序员有机会观察程序运行的很多细节——内存使用情况/分配情况,堆栈运行情况(哪个线程运行时间长,当前哪个线程活跃),这些都看得清清楚楚,对于定位问题,尤其是大型系统的一些典型问题——性能,死锁,还有性能优化工作,都是非常方便的。JVM还提供了很多安全机制,blablabla。总之有了虚拟机很多东西就玩得转。
总而言之,软件开发最后都会面临同样的问题:测试;持续集成/交付;快速定位;分布式处理;性能优化;安全;集群管理等等等等
当然现代软件还有:大数据分析/处理;人工智能
这些java都能满足,且门槛已经被前辈们磨平了,所以企业都愿意选择java——企业发展初期成本低,业务大了之后易扩展,难题易解决。