php中数字与关联数组顺序打乱

 更新时间:2016年11月25日 17:31  点击:1401
关于数组排序,PHP内置了shuffle()函数,可以重排数组排序,但是此函数“将删除原有的键名而不仅是重新排序”,如果传入的是关联数组,则关联数组的键名将丢失。

 解决方法如下:关联数组和索引数组都可以用

 代码如下 复制代码

function array_shuffle($array)
{
    //不是数组
    if(!is_array($array)) {
        return array();
    }
    //如果为空或者只有1项
    if(($count=count($array))<=1){
        return $array;
    }
    
    //得到打乱的键
    $rand_keys = array_rand($array, count($array));
    $newArr=array();
    foreach($rand_keys as $v) {
        $newArr[$v] = $array[$v];
    }
    return $newArr;
}

文章介绍一个自定的资金转换函数,可以根据用户输入的信息转换成银行格式资金格式,有需要以同学可以参考一下。
 代码如下 复制代码

 

// 函数名:ExchangeMoney($N_money)

// 作 用:资金转换函数

// 参 数:$N_money(待转换的金额数字)

// 返回值:字符串

// 备 注:本函数示例:$char=ExchangeMoney(5645132.3155) ==> $char='¥5,645,132.31'

//-----------------------------------------------------------------------------------

 

function ExchangeMoney($N_money)

{

$A_tmp=explode(".",$N_money ); //将数字按小数点分成两部分,并存入数组$A_tmp

$I_len=strlen($A_tmp[0]); //测出小数点前面位数的宽度

if($I_len%3==0)

{

$I_step=$I_len/3; //如前面位数的宽度mod 3 = 0 ,可按,分成$I_step 部分

}else

{

$step=($len-$len%3)/3+1; //如前面位数的宽度mod 3 != 0 ,可按,分成$I_step 部分+1

}

 

 

$C_cur="";

//对小数点以前的金额数字进行转换

while($I_len<>0)

{

$I_step--;

 

 

if($I_step==0)

{

$C_cur .= substr($A_tmp[0],0,$I_len-($I_step)*3);

}else

{

$C_cur .= substr($A_tmp[0],0,$I_len-($I_step)*3).",";

}

 

 

$A_tmp[0]=substr($A_tmp[0],$I_len-($I_step)*3);

$I_len=strlen($A_tmp[0]);

}

 

 

//对小数点后面的金额的进行转换

if($A_tmp[1]=="")

{

$C_cur .= ".00";

}else

{

$I_len=strlen($A_tmp[1]);

if($I_len&lt;2)

{

$C_cur .= ".".$A_tmp[1]."0";

}else

{

$C_cur .= ".".substr($A_tmp[1],0,2);

}

}

//加上人民币符号并传出

$C_cur="¥".$C_cur;

return $C_cur;

}

php中通过对某个日期增加或减去几天,得到另外一个日期,我们会用两个实例来说明一个是strtotime与mktime把时间转换成时间戳再处理,有需要的同学看看。

下例:获得2012-5-1号之前一天的日期

 代码如下 复制代码

<?php
//将时间点转换为时间戳
$date = strtotime('2012-5-1');
//输出一天前的日期,在时间戳上减去一天的秒数
echo date('Y-m-d',$date - 1*24*60*60);
?>

输出:2012-4-30

此外,time()函数获得当前日期的时间戳!

再看一个实例

 代码如下 复制代码

<?PHP
$Date_1=”2008-8-15″;//格式也可以是:$Date_1=”2003-6-25 23:29:14″;

$Date_2=”2009-10-1″;

$Date_List_a1=explode(“-”,$Date_1);

$Date_List_a2=explode(“-”,$Date_2);

$d1=mktime(0,0,0,$Date_List_a1[1],$Date_List_a1[2],$Date_List_a1[0]);

$d2=mktime(0,0,0,$Date_List_a2[1],$Date_List_a2[2],$Date_List_a2[0]);

$Days=round(($d1-$d2)/3600/24);

Echo “两日期之前相差有$Days 天”;
?>

一些时间参考

 代码如下 复制代码

<?php echo $showtime=date(“Y-m-d H:i:s”);?>

显示的格式: 年-月-日 小时:分钟:妙

相关时间参数:

a – “am” 或是 “pm”
A – “AM” 或是 “PM”
d – 几日,二位数字,若不足二位则前面补零; 如: “01″ 至 “31″
D – 星期几,三个英文字母; 如: “Fri”
F – 月份,英文全名; 如: “January”
h – 12 小时制的小时; 如: “01″ 至 “12″
H – 24 小时制的小时; 如: “00″ 至 “23″
g – 12 小时制的小时,不足二位不补零; 如: “1″ 至 12″
G – 24 小时制的小时,不足二位不补零; 如: “0″ 至 “23″
i – 分钟; 如: “00″ 至 “59″
j – 几日,二位数字,若不足二位不补零; 如: “1″ 至 “31″
l – 星期几,英文全名; 如: “Friday”
m – 月份,二位数字,若不足二位则在前面补零; 如: “01″ 至 “12″
n – 月份,二位数字,若不足二位则不补零; 如: “1″ 至 “12″
M – 月份,三个英文字母; 如: “Jan”
s – 秒; 如: “00″ 至 “59″
S – 字尾加英文序数,二个英文字母; 如: “th”,”nd”
t – 指定月份的天数; 如: “28″ 至 “31″
U – 总秒数
w – 数字型的星期几,如: “0″ (星期日) 至 “6″ (星期六)
Y – 年,四位数字; 如: “1999″
y – 年,二位数字; 如: “99″
z – 一年中的第几天; 如: “0″ 至 “365″

可以自由设定显示的内容,连接符号或是显示位置,例如 date(“m-d H”) 或者date(“dmY”);?>等

这两个函数的功能正好相反chr 函数从指定的 ASCII 值返回字符而ord() 函数返回字符串第一个字符的 ASCII 值。明白这些大家就好用此函数了。

先看chr函数

chr() 函数从指定的 ASCII 值返回字符。

chr(ascii)

ascii 参数可以是十进制、八进制或十六进制。通过前置 0 来规定八进制,通过前置 0x 来规定十六进制

例子

 代码如下 复制代码

<?php
echo chr(52);
echo chr(052);
echo chr(0x52);
?>输出:

4
*
R

是不是很神奇,其实也不怪我经常会把一些看不到编码用chr来操作如

 代码如下 复制代码
<?
echo chr(13);
echo chr(32);
?>

大家想想这会输出什么呢,结果是

一个回车,一个空格

下面再来看ord函数

ord() 函数返回字符串第一个字符的 ASCII 值。


从上面来看正好与chr 相反是吧,

语法

 代码如下 复制代码

ord(string)
例子
<?php
echo ord("h");
echo ord("hello");
?>

输出结果:

104
104

好了,现在我们来看一个综合的实例

 

 代码如下 复制代码
<?php
$str1=chr(88);
echo $str1; //返回值为X
$str2=chr(ord(X)+1); //
echo $str2; //返回值为 Y
echo "t";
$str3=ord('S');
echo $str3; //返回值为83
?>

下面有一篇关于php ord 函数与中文乱码解决方法

更多详细内容请查看:http://www.111cn.net/phper/php-function/php-ord.htm

文章很简单二个实例实现了php目录创建与递归无限创建和删除目录功能,有需要的朋友可以参考一下,我们用的是mkdir,rddir来实例的。

下面是程序代码:

 代码如下 复制代码
function mkdirs($dir)
{
if(!is_dir($dir))
{
if(!mkdirs(dirname($dir))){
return false;
}
if(!mkdir($dir,0777)){
return false;
}
}
return true;
}
mkdirs('div/css/layout');

同样的思路,php用rmdir和unlink递归删除多级目录的代码:

 代码如下 复制代码

function rmdirs($dir)
{
$d = dir($dir);
while (false !== ($child = $d->read())){
if($child != '.' && $child != '..'){
if(is_dir($dir.'/'.$child))
rmdirs($dir.'/'.$child);
else unlink($dir.'/'.$child);
}
}
$d->close();
rmdir($dir);
}

[!--infotagslink--]

相关文章