月度归档:2016年05月

商品SKU选择实现

在客户购买商品的时候,若这个商品存在多种”规格”(SKU),就需要客户手动选择自己想要的哪款。当时并不是每种我们都有库存, 所有就需要提供提供一个筛选功能,当客户选中一个条件的时候,需要设置其他条件中的一些值不可选。 这样就能保证不论客户怎么选择,到最后的选择都是有库存的”规格”(SKU)

开始之前先定义几种术语

属性集: 一个商品全部属性的集合

属性: 商品中的 尺码 颜色 就是两个属性

属性值: 尺码、颜色可有多个值 比如 衣服的尺码:S M XL 衣服的颜色:黑色 白色 蓝色 其中 XL 黑色就是属性值

SKU: Stock Keeping Uint(库存量单位) 由属性值组合而成(这些属性值属于不通的属性)如 一件衣服 (XL,白色) 它能确定商品的 唯一性 ,同一款式的衣服 可能有不通的颜色和大小 ,把颜色大小限制住,就能确定这件‘商品’了。

为了简化 我们虚拟出一个的商品, 下面是它的属性集和SKU:

为选择之前是这种显示状态

attr1-attr4中有 2x4x3x2=42种组合,但是有库存的只有上面6种组合

我们要做的就是,在选择某一个属性的时候,把其他为选择的属性中的一些值设置为block(锁定状态) 因为它们和已选属性的组合是没有库存的(有库存的只有上面6种)

比如:
选择 10 和 21后, 有库存的SKU(组合) 只有

attr3中的31 32 以及attr4中的 41 就要设置为block

总结1:在所有库存组合(sku_list)中筛选出包含选中属性值(10,21)组合(10|21|30|40)未选的属性(attr3、attr4)中的所有属性值若不在这个组合中就设置为block

还有一个问题,在已选属性(attr1,attr2)中 , 我可以把21换成2022; 因为 10|21 10|22 也是一种可行组合(有库存),10|23不可行,所以需要2022也可选,23设置为block

或者21不变,修改attr1中的属性值 11|21 不可行,11设置block。

总结2: 已选属性 (attr1,attr2) 中任意一个属性(attr1)的属性值(10,11), 若不能和其他属性(attr2)中的选中属性值(21) 组合成有效(有库存)组合, 则设置该属性(11)为block

好了,接下来就是根据上面总结的两条,来进行程序的实现 点击 商品SKU选择DEMO 可查看demo

 

提高php编程效率的53个小知识点

转载请注明来源:提高php编程效率的53个小知识点

用单引号代替双引号来包含字符串,这样做会更快一些。因为PHP会在双引号包围的字符串中 搜寻变量,单引号则不会,注意:只有echo能这么做,它是一种可以把多个字符串当作参数的“函数”(译注:PHP手册中说echo是语言结构,不是真正 的函数,故把函数加上了双引号)。
1、如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍。
2、$row[’id’] 的速度是$row[id]的7倍。
3、echo 比 print 快,并且使用echo的多重参数(译注:指用逗号而不是句点)代替字符串连接,比如echo $str1,$str2。
4、在执行for循环之前确定最大循环数,不要每循环一次都计算最大值,最好运用foreach代替。
5、注销那些不用的变量尤其是大数组,以便释放内存。
6、尽量避免使用__get,__set,__autoload。
7、require_once()代价昂贵。
8、include文件时尽量使用绝对路径,因为它避免了PHP去include_path里查找文件的速度,解析操作系统路径所需的时间会更少。
9、如果你想知道脚本开始执行(译注:即服务器端收到客户端请求)的时刻,使用$_SERVER[‘REQUEST_TIME’]要好于time()。
10、函数代替正则表达式完成相同功能。
11、str_replace函数比preg_replace函数快,但strtr函数的效率是str_replace函数的四倍。
12、如果一个字符串替换函数,可接受数组或字符作为参数,并且参数长度不太长,那么可以考虑额外写一段替换代码,使得每次传递参数是一个字符,而不是只写一行代码接受数组作为查询和替换的参数。
13、使用选择分支语句(译注:即switch case)好于使用多个if,else if语句。
14、用@屏蔽错误消息的做法非常低效,极其低效。
15、打开apache的mod_deflate模块,可以提高网页的浏览速度。
16、数据库连接当使用完毕时应关掉,不要用长连接。
17、错误消息代价昂贵。
18、在方法中递增局部变量,速度是最快的。几乎与在函数中调用局部变量的速度相当。
19、递增一个全局变量要比递增一个局部变量慢2倍。
20、递增一个对象属性(如:$this->prop++)要比递增一个局部变量慢3倍。
21、递增一个未预定义的局部变量要比递增一个预定义的局部变量慢9至10倍。
22、仅定义一个局部变量而没在函数中调用它,同样会减慢速度(其程度相当于递增一个局部变量)。PHP大概会检查看是否存在全局变量。
23、方法调用看来与类中定义的方法的数量无关,因为我(在测试方法之前和之后都)添加了10个方法,但性能上没有变化。
24、派生类中的方法运行起来要快于在基类中定义的同样的方法。
25、调用带有一个参数的空函数,其花费的时间相当于执行7至8次的局部变量递增操作。类似的方法调用所花费的时间接近于15次的局部变量递增操作。
26、Apache解析一个PHP脚本的时间要比解析一个静态HTML页面慢2至10倍。尽量多用静态HTML页面,少用脚本。
27、除非脚本可以缓存,否则每次调用时都会重新编译一次。引入一套PHP缓存机制通常可以提升25%至100%的性能,以免除编译开销。
28、尽量做缓存,可使用memcached。memcached是一款高性能的内存对象缓存系统,可用来加速动态Web应用程序,减轻数据库负载。对运算码 (OP code)的缓存很有用,使得脚本不必为每个请求做重新编译。
29、当操作字符串并需要检验其长度是否满足某种要求时,你想当然地会使用strlen()函数。此函数执行起来相当快,因为它不做任何计算,只返回在zval 结构(C的内置数据结构,用于存储PHP变量)中存储的已知字符串长度。但是,由于strlen()是函数,多多少少会有些慢,因为函数调用会经过诸多步骤,如字母小写化(译注:指函数名小写化,PHP不区分函数名大小写)、哈希查找,会跟随被调用的函数一起执行。在某些情况下,你可以使用isset() 技巧加速执行你的代码。
(举例如下)
if (strlen($foo) < 5) { echo “Foo is too short”$$ }
(与下面的技巧做比较)
if (!isset($foo{5})) { echo “Foo is too short”$$ }
调用isset()恰巧比strlen()快,因为与后者不同的是,isset()作为一种语言结构,意味着它的执行不需要函数查找和字母小写化。也就是说,实际上在检验字符串长度的顶层代码中你没有花太多开销。
34、当执行变量$i的递增或递减时,$i++会比++$i慢一些。这种差异是PHP特有的,并不适用于其他语言,所以请不要修改你的C或Java 代码并指望它们能立即变快,没用的。++$i更快是因为它只需要3条指令(opcodes),$i++则需要4条指令。后置递增实际上会产生一个临时变 量,这个临时变量随后被递增。而前置递增直接在原值上递增。这是最优化处理的一种,正如Zend的PHP优化器所作的那样。牢记这个优化处理不失为一个好 主意,因为并不是所有的指令优化器都会做同样的优化处理,并且存在大量没有装配指令优化器的互联网服务提供商(ISPs)和服务器。
35、并不是事必面向对象(OOP),面向对象往往开销很大,每个方法和对象调用都会消耗很多内存。
36、并非要用类实现所有的数据结构,数组也很有用。
37、不要把方法细分得过多,仔细想想你真正打算重用的是哪些代码?
38、当你需要时,你总能把代码分解成方法。
39、尽量采用大量的PHP内置函数。
40、如果在代码中存在大量耗时的函数,你可以考虑用C扩展的方式实现它们。
41、评估检验(profile)你的代码。检验器会告诉你,代码的哪些部分消耗了多少时间。Xdebug调试器包含了检验程序,评估检验总体上可以显示出代码的瓶颈。
42、mod_zip可作为Apache模块,用来即时压缩你的数据,并可让数据传输量降低80%。
43、在可以用file_get_contents替代file、fopen、feof、fgets等系列方法的情况下,尽量用 file_get_contents,因为他的效率高得多!但是要注意file_get_contents在打开一个URL文件时候的PHP版本问题;
44、尽量的少进行文件操作,虽然PHP的文件操作效率也不低的;
45、优化Select SQL语句,在可能的情况下尽量少的进行Insert、Update操作(在update上,我被恶批过);
46、尽可能的使用PHP内部函数(但是我却为了找个PHP里面不存在的函数,浪费了本可以写出一个自定义函数的时间,经验问题啊!);
47、循环内部不要声明变量,尤其是大变量:对象(这好像不只是PHP里面要注意的问题吧?);
48、多维数组尽量不要循环嵌套赋值;
49、在可以用PHP内部字符串操作函数的情况下,不要用正则表达式;
50、foreach效率更高,尽量用foreach代替while和for循环;
51、用单引号替代双引号引用字符串;
52、“用i+=1代替i=i+1。符合c/c++的习惯,效率还高”;
53、对global变量,应该用完就unset()掉;

小和尚卖石头

640

一天,一个小和尚跑过来,请教禅师:“师父,我人生最大的价值是什么呢?”禅师说:“你到后花园搬一块大石头,拿到菜市场上去卖,假如有人问价,你不要讲话,只伸出两个指头;假如他跟你还价,你不要卖,抱回来,师父告诉你,你人生最大的价值是什么。”

第二天一大早,小和尚抱块大石头,到菜市场上去卖。菜市场上人来人往,人们很好奇,一家庭主妇走了过来,问:“石头多少钱卖呀?”和尚伸出了两个指头,主妇说:“2元钱?”和尚摇摇头,家庭主妇说:“那么是20元?好吧,好吧!我刚好拿回去压酸菜。”小和尚听到:“我的妈呀,一文不值的石头居然有人出20元钱来买!我们山上有的是呢!”

于是,小和尚没有卖,乐呵呵地去见师父:“师父,今天有一个家庭主妇愿意出20元钱,买我的石头。师父,您现在可以告诉我,我人生最大的价值是什么了吗?”禅师说:“嗯,不急,你明天一早,再把这块石头拿到博物馆去,假如有人问价,你依然伸出两个指头;如果他还价,你不要卖,再抱回来,我们再谈。”

第二天早上,在博物馆里,一群好奇的人围观,窃窃私语:“一块普通的石头,有什么价值摆在博物馆里呢?”“既然这块石头摆在博物馆里,那一定有它的价值,只是我们还不知道而已。”这时,有一个人从人群中窜出来,冲着小和尚大声说:“小和尚,你这块石头多少钱卖啊?”小和尚没出声,伸出两个指头,那个人说:“200元?”小和尚摇了摇头,那个人说:“2000元就2000元吧,刚好我要用它雕刻一尊神像。”小和尚听到这里,倒退了一步,非常惊讶!

他依然遵照师傅的嘱托,把这块石头抱回了山上,去见师傅:“师傅,今天有人要出2000元买我这块石头,这回您总要告诉我,我人生最大的价值是什么了吧?”禅师哈哈大笑说:“你明天再把这块石头拿到古董店去卖,照例有人还价,你就把它抱回来。这一次,师傅一定告诉你,你人生最大的价值是什么。”

第三天一早,小和尚又抱着那块大石头来到了古董店,依然有一些人围观,有一些人谈论:“这是什么石头啊?在哪儿出土的呢?是哪个朝代的呀?是做什么用的呢?”终于有一个人过来问价:“小和尚,你这块石头多少钱卖啊?”小和尚依然不声不语,伸出了两个指头。“20000元?”小和尚睁大眼睛,张大嘴巴,惊讶地大叫一声:“啊?!”那位客人以为自己出价太低,气坏了小和尚,立刻纠正说:“不!不!不!我说错了,我是要给你200000元!” “200000元!”小和尚听到这里,立刻抱起石头,飞奔回山上去见师父,气喘吁吁地说:“师父,师父,这下我们可发达了,今天的施主出价200000元买我们的石头!现在您总可以告诉我,我人生最大的价值是什么了吧?”

禅师摸摸小和尚的头,慈爱地说:“孩子啊,你人生最大的价值就好像这块石头,如果你把自己摆在菜市场上,你就只值20元钱;如果你把自己摆在博物馆里,你就值2000元;如果你把自己摆在古董店里,你值200000元!平台不同,定位不同,人生的价值就会截然不同!”

这个故事是否启发了你对自己人生的思考?你将如何定位自己的人生呢?你准备把自己摆在怎样的人生拍卖场去拍卖呢?你要为自己寻找一个怎样的人生舞台呢?

不怕别人看不起你,就怕你自己看不起自己。谁说你没有价值?除非你把自己当作破石头放在烂泥中,没有人能够给你的人生下任何的定义。你选择怎样的道路,将决定你拥有怎样的人生。

为什么一个老板再难,也不会轻言放弃,而一个员工做得不顺就想逃走,为什么一对夫妻再吵再大矛盾,也不会轻易离婚,而一对情侣常为一些很小的事就分开了。说到底,你在一件事,一段关系上的投入多少,决定你能承受多大的压力,能取得多大的成功,能坚守多长时间。 冯仑说,伟大都是熬出来的。为什么用熬,因为普通人承受不了的委屈你得承受,普通人需要别人理解安慰鼓励,但你没有,普通人用对抗消极指责来发泄情绪,但你必须看到爱和光,在任何事情上学会转化消化,普通人需要一个肩膀在脆弱的时候靠一靠,而你就是别人依靠的肩膀。 孝庄对康熙说:孙儿,大清国最大的危机不是外面的千军万马,最大的危难,在你自己的内心。

弟子问:师父您有时候打人骂人,有时又对人又彬彬有礼,这里面有什么玄机吗?师父说:对待上等人直指人心,可打可骂,以真面目待他;对待中等人最多隐喻他,要讲分寸,他受不了打骂;对待下等人要面带微笑,双手合十,他很脆弱、心眼小,只配用世俗的礼节对他!你受得了何种委屈,决定你能成为何种人。

一个不会游泳的人,老换游泳池是不能解决问题的;

一个不会做事的人,老换工作是解决不了自己的能力的;

一个不懂经营爱情的人,老换男女朋友是解决不了问题的;

一个不懂经营家庭的人,怎么换爱人都解决不了问题;

一个不学习的老板,绝对不会持续的成功。

我是一切的根源,要想改变一切,首先要改变自己!学习是改变自己的根本。其实,你爱的是你自己;你喜欢的亦是你自己。你爱的、你恨的,都是你自己。你变了,一切就都变了。

你的世界是由你创造出来的;

你的一切都是你创造出来的;

你是阳光,你的世界充满阳光;

你是爱,你就生活在爱的氛围里;

你是快乐,你就是在笑声里。

同样的,你每天抱怨、挑剔、指责、怨恨,你就生活在地狱里;一念到天堂,一念下地狱。你心在哪,成就就在哪!

为什么你的公司被干掉了?

哲学界George Santayana曾经说过,“那些不懂得从过去学习经验的人注定要在同样的石头上摔第二次。”创业是一个不断试错的过程,失败则是一个排除的过程。在浩浩荡荡的创业大潮中,失败者远比成功者更多,总结前人之过,对于创业者来说,也许更有用。

2015年,中国每分钟诞生8家公司,平均每天新登记注册的企业达到1.16万户。然而,这些企业的平均寿命却不足3年,中国创业企业的失败率为80%左右,每年新创办的企业中有50%会在半年内倒闭。

都说创业改变命运,可是你看,如果方法不对,不要说改变了,可能连”命”都保不住!

致命方法一:招聘员工,”能力”放首位。

当你在积极为企业选拔有能力的员工时,成功的创业者早已懂得招聘价值认同度高的员工。工作能力也许可以提高工作效率,而员工对企业价值的共识才能推动企业源源不断的向前发展。

致命方法二:低估了创业的艰难

当你单纯的认为创业有两条路(成功的路与失败的路)可以走时,成功的创业者早就知道了创业没有所谓的顺境,成功没有捷径可言,做好了完全失败的准备。

致命方法三:固步自封

当你紧紧抓着目前的赢利点沾沾自喜,舍不得放手时,成功的创业者早已另辟蹊径,尝试起新鲜的事物,获取更大的盈利空间。

致命方法四:弱者心态

当你为缺钱苦不堪言,有了打算放弃创业的念头时,成功的创业者早就树立了”没钱更要创业”的心态。创业,亦是一场心态的比拼。

致命方法五:乐忠于融资

当你费尽心思,想要拿到尽量多的融资时,成功的创业者早就想尽办法,让项目变得具有价值,有价值的项目自然可以赢得市场。

致命方法六:脑子里只想着赢

当你把心思全部放在如何打败竞争对手上时,成功的创业者已经开始考虑公司是否具有垄断项目,企业是否可以独特长久的存在。当你把目标致力于我要变得更强时,成功的创业者思考的不仅是变强还有企业的吸引力、知名度等问题。

致命方法七:眼光狭隘

当你在思考如何吸引优秀人才时,成功的创业者已经在培养人才!当你在思考公司如好更好的发展时,成功的创业者已经在思考企业应该怎样存在!当你在苦苦寻觅最厉害的管理者时,成功的创业者已经不再刻意管理,而是让管理归于简单。当你还在思考未来如何发展时,成功的创业者已经开始调整发展战略,不思考未来,而是思考未来需要怎样的企业。

致命方法八:只搞老一套

当你在为产品营销寻觅推广高手时,成功的创业者已经在改善产品,使其更具吸引力。当你还在用口号、奖励、活动来激励员工时,成功的创业者已经在靠企业文化、企业格调来吸引员工。当你还在死守着”资金”、”人脉”、”市场”、”竞争力”这些元素时,成功的创业者已经开始探讨企业价值。当你还在乐此不疲的做热门领域时,成功的创业者已经成功开辟了小而新的领域,不走寻常道。

致命方法九:没有主心骨

当你已被投资人套牢,被他们牵着鼻子走时,成功的创业者早已明确了目标,凡事自己拿主意。当你还在模棱两可,无法对公司进行清晰定位时,成功的创业者早就有了明确的定位,永远知道下一步怎么走。

致命方法十:过于追求完美

当你事无巨细都想尽善尽美时,成功的创业者早就成功锁定目标,从用户角度设计产品,制定销售策略,把力放在一处使。

致命方法十一:盲目创新

当你大胆尝试,进行颠覆式创新时,成功的创业者早就懂得适度改变才是最好的创新,完全颠覆,只能是一次没有结果的冒险。

致命方法十二:小心翼翼

当你还在谨慎小心,担心犯错,不敢迈出步子时,成功的创业者早就懂得了稳中求变。变则通,不变只能等死。

我知道,大多数人都喜欢讨论成功,而极少数愿意谈及失败。就像是野兽总是不想将伤口暴露在外面。然而,探讨失败的意义,可能远远大于成功。因为只有面对挫折,总结教训,企业才能往前走!

来源:商界必读