PHP 使用list()实现不用第三个变量交换数字
一直以来都用第三个变量过渡来交换两个数,那么如何节省变量呢(个人认为……这是用途OTZ变量多感觉很乱啊)
其实真的超简单OTZ
1list($a, $b) = array($b, $a);
2
list()
的功能是把数组中的一些值赋给变量
关于list()
的扩展阅读:http://www.php.net/manual/zh/function.list.php
随手记录自己的学习过程
一直以来都用第三个变量过渡来交换两个数,那么如何节省变量呢(个人认为……这是用途OTZ变量多感觉很乱啊)
其实真的超简单OTZ
1list($a, $b) = array($b, $a);
2
list()
的功能是把数组中的一些值赋给变量
关于list()
的扩展阅读:http://www.php.net/manual/zh/function.list.php
这个,其实PHP还是有自带函数的,
number_format()
扩展阅读:http://www.w3school.com.cn/php/func_string_number_format.asp
不过有的时候我真的是太依赖自带函数了,可能其他语言没那么强大的函数库就死了吧,所以这里还是需要动动脑子的,正好弥补代码量不足的问题。
缺点在于:小数死……(这个缺点有空修复好了= =目前正在赶进度……)
这其实还是一道题目OTZ当然不用在意这些细节,写出来之后它已经不算是题目了吧。
但我写的函数有个缺点,那就是它是以length
分割的(因为还不会正则表达式
),在PHP 语法糖一枚中提到过:
length = 1
代表 截取一个字节,所以对于中文不适用。
2014年02月02日更新:PHP 实现中文字符串截取无乱码修复中文支持
中文截取就会出现乱码问题。
补刀:如果不是题目的话可以使用官方自带函数strrev()
扩展阅读:http://www.w3school.com.cn/php/func_string_strrev.asp
先来看一下函数部分吧。
又是题目,除了题目我果然一无所有=A=
1 <?php
2 $fruits = array('strawberry'=>'red', 'banana'=>'yellow');
3 ?>
4
A.echo "A banana is {$fruits['banana']}";
B.echo "A banana is $fruits['banana']";
C.echo "A banana is {$fruits[banana]}";
D.echo "A banana is $fruits[banana]";
结果选A,这是一件我觉得很神奇的事情,为什么B不行呢,因为就是那么规定的,至于D,会报错,但还是会有输出,不推荐,因为这个常量并没有被定义。
扩展阅读:http://www.php.net/manual/zh/language.types.string.php#language.types.string.parsing
又是刷题目刷到的,真是一个悲伤的故事。
1<?php
2$s = '12345 ';
3$s[$s[1]] = '234 ';
4echo $s;
5?>
6
输出是什么呢,很奇怪吧,明明不是数组。
其实在字符串中这么表示意思就是第n - 1
个字符。
比如$s[1]
截取的就是2
,当然这里只接受length = 1
的字符,而不接受字符串,所以第二步只是将3
替换为了2
,而没有把字符串替换进去。
*length = 1
*代表 截取一个字节
,所以对于中文不适用,关于中文的字节数,见PHP utf-8下strlen()小结
扩展阅读:http://www.php.net/manual/zh/language.types.string.php#language.types.string.substr
字符串原型大概指的是:$str = 'abc'[1]
差不多这个意思吧
又是一道坑爹的题目,不得不说《细说PHP》很好的解决了各种误区问题啊……
这里稍微改一下,其实只是把字符串内容改了而已OTZ。
1 $array = array('sky', 'power');
2
3 foreach ($array as $key => $value) {
4 $array[$key] = 'ao';
5 }
6
7 print_r($array);
8
请问输出是什么?
直观的想想,$value
变了的话数组的元素值不就应该改变了吗,但输出却是:Array ( [0] => sky [1] => power )
,而我们把$value
改为$array[$key]
,输出结果元素就全部替换为ao
了,看来并不能这么替换,毕竟语法上赋值是后者。
placeholder
好像是一个会用上瘾的属性,比如说本站的搜索框,请输入关键词用的就是placeholder
,它比value
要好用许多,当输入为空时出现,有输入时消失,value
的用户体验就糟糕透了。
当然,这是HTML5的新属性,所以可能又会在IE6碰壁(大概) 扩展阅读:http://www.w3school.com.cn/html5/att_input_placeholder.asp
而label则把文字和input
关联了起来,比如
1<label>保留文件名:<input type="checkbox" name="file_name" value="yes"></label>
2
那么即使是点击文字,也会选中checkbox
,比起文字孤立来更好
具体应用于相对路径生成器
这里我用的是label
的隐形写法,它还有显性写法,见扩展阅读。
扩展阅读:
label
属性label
属性
strlen()
用于获取字符串长度,英文1字节好无悬念,而中文呢。
1<?php
2 $str = 'hello 你好世界';
3 echo strlen($str);
4?>
5
运行了一下这个结果是18
很疑惑,为什么呢,一直以为中文就按2字节来计,结果看到:中文字占2-4字节
这样就明白了,在这里一个中文三个字节,剩下的以后再补充好了
依旧是做到题目的时候发现了这个问题,可能是PHP版本不同引发的问题,然后默默的搜索了一下。
按引用传参,其实只用在定义时指定
"&"
即可,调用时不用写,只不过一直以来都这么写也没报过错,看来是5.4版增强了检查,不允许这种调用了。 调用时去掉"&"
,只保留方法定义中的"&"
,这次一切OK了。
6.以下代码的执行后是,$result值为( B )。
1<?php
2 $a = "01";
3 $result = 1;
4 if(in_array($a,array("1"))){
5 $result = 2;
6 }else if($a == "1"){
7 $result = 3;
8 }else if($a == "01"){
9 $result = 4;
10 }else{
11 $result = 5;
12 }
13?>
14
A.1 B.2 C.3 D.4 E.5