标签 知识 下的文章

PHP array_multisort()多维数组排序实例

题目如下:
请将二维数组按照name的长度进行重新排序,按照顺序将id赋值(从1开始)。

    $Tarray = array(
        array('id' => 0, 'name' => '123'),
        array('id' => 0, 'name' => '1234'),
        array('id' => 0, 'name' => '123abc'),
        array('id' => 0, 'name' => '12345'),
        array('id' => 0, 'name' => '123456')
        );

- 阅读剩余部分 -

PHP 双引号内数组的正确输出方式

又是题目,除了题目我果然一无所有=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 语法糖一枚

又是刷题目刷到的,真是一个悲伤的故事。

<?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 使用foreach批量赋值误区

又是一道坑爹的题目,不得不说《细说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了,看来并不能这么替换,毕竟语法上赋值是后者。

表单input增强用户体验(label和placeholder)

placeholder好像是一个会用上瘾的属性,比如说本站的搜索框,请输入关键词用的就是placeholder,它比value要好用许多,当输入为空时出现,有输入时消失,value的用户体验就糟糕透了。

当然,这是HTML5的新属性,所以可能又会在IE6碰壁(大概)
扩展阅读:http://www.w3school.com.cn/html5/att_input_placeholder.asp

而label则把文字和input关联了起来,比如

<label>保留文件名:<input type="checkbox" name="file_name" value="yes"></label>

那么即使是点击文字,也会选中checkbox,比起文字孤立来更好
具体应用于相对路径生成器

这里我用的是label的隐形写法,它还有显性写法,见扩展阅读。

扩展阅读:

  1. http://www.w3school.com.cn/tags/tag_label.asp HTML的label属性
  2. http://www.w3school.com.cn/html5/tag_label.asp HTML5中的label属性

PHP utf-8下strlen()小结

strlen()用于获取字符串长度,英文1字节好无悬念,而中文呢。

<?php
    $str = 'hello 你好世界';
    echo strlen($str);
?>

运行了一下这个结果是18很疑惑,为什么呢,一直以为中文就按2字节来计,结果看到:中文字占2-4字节
这样就明白了,在这里一个中文三个字节,剩下的以后再补充好了

扩展阅读http://php.net/strlen

PHP in_array()函数设置

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

- 阅读剩余部分 -

PHP strcmp()比较字符串大小

题目如下:
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

- 阅读剩余部分 -

PHP 定界符的使用

题目如下:

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所在行不能包括其他任何字符,尤其意味着该标识符不能被锁紧,而且唉结束标记与分号之前和之后都不能有任何空格和制表符。

但是为什么这个没有转换呢,似乎因为这是''引起来的,如果没有单引号或者改为双引号,就起到了双引号的作用。

当然,据说定位符很少使用。