PHP 使用list()实现不用第三个变量交换数字
一直以来都用第三个变量过渡来交换两个数,那么如何节省变量呢(个人认为……这是用途OTZ变量多感觉很乱啊)
其实真的超简单OTZ
list($a, $b) = array($b, $a);
list()
的功能是把数组中的一些值赋给变量
关于list()
的扩展阅读:http://www.php.net/manual/zh/function.list.php
一直以来都用第三个变量过渡来交换两个数,那么如何节省变量呢(个人认为……这是用途OTZ变量多感觉很乱啊)
其实真的超简单OTZ
list($a, $b) = array($b, $a);
list()
的功能是把数组中的一些值赋给变量
关于list()
的扩展阅读:http://www.php.net/manual/zh/function.list.php
这其实还是一道题目OTZ当然不用在意这些细节,写出来之后它已经不算是题目了吧。
但我写的函数有个缺点,那就是它是以length
分割的(因为还不会正则表达式
),在PHP 语法糖一枚中提到过:
length = 1
代表 截取一个字节,所以对于中文不适用。
2014年02月02日更新:PHP 实现中文字符串截取无乱码修复中文支持
中文截取就会出现乱码问题。
补刀:如果不是题目的话可以使用官方自带函数strrev()
扩展阅读:http://www.w3school.com.cn/php/func_string_strrev.asp
先来看一下函数部分吧。
又是题目,除了题目我果然一无所有=A=
<?php
$fruits = array('strawberry'=>'red', 'banana'=>'yellow');
?>
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
又是刷题目刷到的,真是一个悲伤的故事。
<?php
$s = '12345 ';
$s[$s[1]] = '234 ';
echo $s;
?>
输出是什么呢,很奇怪吧,明明不是数组。
其实在字符串中这么表示意思就是第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。
$array = array('sky', 'power');
foreach ($array as $key => $value) {
$array[$key] = 'ao';
}
print_r($array);
请问输出是什么?
直观的想想,$value
变了的话数组的元素值不就应该改变了吗,但输出却是:Array ( [0] => sky [1] => power )
,而我们把$value
改为$array[$key]
,输出结果元素就全部替换为ao
了,看来并不能这么替换,毕竟语法上赋值是后者。
6.以下代码的执行后是,$result值为( B )。
<?php
$a = "01";
$result = 1;
if(in_array($a,array("1"))){
$result = 2;
}else if($a == "1"){
$result = 3;
}else if($a == "01"){
$result = 4;
}else{
$result = 5;
}
?>
A.1 B.2 C.3 D.4 E.5
题目如下:
2.以下程序运行结果为( D )。
<?
$str = "LAMP";
$str1 = "LAMPBrother";
$strc = strcmp($str, $str1);
switch ($strc){
case 1:
echo "str > str1";
break;
case -1:
echo "str < str1";
break;
case 0:
echo "str = str1";
break;
default:
echo "str <> str1";
}
?>
A.str > str1 B.str < str1 C.str = str1 D.str <> str1
题目如下:
17.下面的语句输出结果(A )。
<?php
$foo = 'test';
$bar = <<<'EOT'
$foo bar
EOT;
echo $bar;
?>
A.$foo bar; B.'EOT' $foo bar EOT; C.test bar; D.'EOT' test bar EOT;
书上说定界符和双引号起到了一样的效果
注意事项:
EOT所在行不能包括其他任何字符,尤其意味着该标识符不能被锁紧,而且唉结束标记与分号之前和之后都不能有任何空格和制表符。
但是为什么这个没有转换呢,似乎因为这是''
引起来的,如果没有单引号或者改为双引号,就起到了双引号的作用。
当然,据说定位符很少使用。
做到好多道这样的题……基本上没有考虑对过。
下面程序中$b的输出结果是( A )。
<?php
$a=3;
$b=4;
if($a||$b=5){
echo 'todo';
}
echo $b;
?>
A. todo4 B.5 C.3 D.false
这题之所以选A,在于运算到$a
时已经是True
了,逻辑运算符不会去运算后面的$b=5
所以$b
并未改变其值。
昨天做到这样一道题目:
6.下面哪个表达式不能将两个字符串$s1和$s2串联成一个单独的字符串( )。
A.$s1+$s2
B."{$s1}{$s2}"
C.$s1.$s2
D.implode('',array($s1,$s2))
implode()是什么样完全不知道,加上被其他语言的误导误以为A是可以的(其实是不行的,运算时会转换成数值)
PHP手册中,implode可以将一维数组转换成字符串,也就起到了粘合作用。string implode ( string $glue , array $pieces )
$glue
也就是连接符,用什么来连接,而后面则是选择一个数组
W3School中的例子:
<?php
$arr = array('Hello','World!','Beautiful','Day!');
echo implode(" ",$arr);
?>
结果是Hello World! Beautiful Day!
扩展阅读: