PHP 教程 在线

584PHP 数组

数组排序时发现 sort 与 rsort 排序完毕以后,var_dump 输出时原有 key 值丢失,变为数字索引。

<?php
$a=array("key1"=>"val1","key6"=>"val6","key3"=>"val1","key5"=>"val6","key4"=>"val8");
echo "sort(\$a)=".PHP_EOL;
sort($a);
var_dump($a);
?>

输出如下:

sort($a)=
array(5) {
  [0]=>
  string(4) "val1"
  [1]=>
  string(4) "val1"
  [2]=>
  string(4) "val6"
  [3]=>
  string(4) "val6"
  [4]=>
  string(4) "val8"
}
<?php
$a=array("key1"=>"val1","key6"=>"val6","key3"=>"val1","key5"=>"val6","key4"=>"val8");
echo "rsort(\$a)=".PHP_EOL;
rsort($a);
var_dump($a);
?>

输出如下:

rsort($a)=
array(5) {
  [0]=>  string(4) "val8"
  [1]=>  string(4) "val6"
  [2]=>  string(4) "val6"
  [3]=>  string(4) "val1"
  [4]=>  string(4) "val1"
}

583PHP 数组

foreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。有两种语法:

foreach (array_expression as $value)
    statement
foreach (array_expression as $key => $value)
    statement

第一种格式遍历给定的 array_expression 数组。每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。

第二种格式做同样的事,只除了当前单元的键名也会在每次循环中被赋给变量 $key。

582PHP Switch

在 switch 语句中漏写 break, 可能会使你的输出在你意料之外,下面我来和你们仔细讲解 break 的作用:

面的代码是正确示范,结果将是只会输出:这里是a

倘若你忘敲了 case 'a',case 'b',case 'c' 后的 break,结果将是将代码中的每一条输出语句都输出。

倘若你只敲了 case 'c' 后的 break, 结果将会是输出包含 case 'c' 之前的所有输出语句。

讲到这里大家应该明白了:原来 switch 语句不遇到 break 将不会自己"拐弯",希望这些将会帮助到才接触 php 的菜鸟们!

<?php
$x='a';
switch ($x){
case 'a':                      //变量$x的值和该种情况匹配,将从此处开始执行。
    echo "这里是a"."<br>";
    break;
case 'b': 
    echo "这里是b"."<br>";
    break;
case 'c':
    echo "这里是c"."<br>";
    break;
default:
    echo "这里是default";
}
?>

581PHP If...Else

如果你觉得最后这两个实例的运行结果不对,那是因为自 PHP5.0 开始,用PHP获取系统时间时,时间比当前时间少 8 个小时。原因是 PHP.ini 中没有设置 timezone 时,PHP 是使用的 UTC 时间,所以在中国时间要少 8 小时。因此你的时间都要 -8,所以代码是没问题的。

解决办法:

1.在PHP.ini文件中修改设置。

[Date]
; Defines the default timezone used by the date functions
date.timezone = Asia/Shanghai

这里真是。。。可以设置 Shanghai,Chongqin,Hong_Kong,TaiBei... 等等,可就是没有找到 Beijing,不知道是什么原因。

2.在PHP程序中运行时设置。

<?php
if(date_default_timezone_get() != "1Asia/Shanghai") date_default_timezone_set("Asia/Shanghai");
?>

注意:用 date_default_timezone_get 获得的时间设置中有一个 1,也不太清楚是杂回事呢。

3.在使用时间时自己多加 8*3600 秒也是行滴。

<?php
echo date("Y-m-d H:i:s",time()+8*3600);
?>

580PHP If...Else

elseifelse if 完全同效果,elseif 是 PHP 为 else if 专门做到容错版。更准确更严格到写法为后者: else if

<?php
$t=date("H");
if ($t<"10")
{
    echo "Have a good morning!";
}
elseif ($t<"20")
{
    echo "Have a good day!";
}
else
{
    echo "Have a good night!";
}
?>

等同于:

<?php
$t=date("H");
if ($t<"10")
{
    echo "Have a good morning!";
}
else if ($t<"20") //此处有空格
{
    echo "Have a good day!";
}
else
{
    echo "Have a good night!";
}
?>