首页 > 编程技术 > php

php中操作json格式数据转换实现代码

发布时间:2016-11-25 17:31

本文章主要是介绍了在php中操作json格式数据转换程序,我们利用了json_decode()和json_encode()这两个函数来进行操作方便很多,有需要学习的朋友可以参考一下本实例。

第一步我们利用json_encode()函数把数据转换成json数据

 代码如下 复制代码
<?php
//php中用数组表示JSON格式数据
$arr = array(
'firstname' => iconv('gb2312', 'utf-8', '非诚'),
'lastname' => iconv('gb2312', 'utf-8', '勿扰'),
'contact' => array(
'email' =>'fcwr@111cn.net',
'website' =>'http://www.111cn.net',
)
);
//将数组编码成JSON数据格式
$json_string = json_encode($arr);
//JSON格式数据可直接输出
echo $json_string;
?>

此转换函数只支持utf-8格式的如果中间有中文可以利用iconv或者mb转为UTF-8再进行json_encode,这样就不会有任何问题。

第二步,对数据进行解析我们也用一个php json处理函数json_decode()了,代码如下

 代码如下 复制代码
<?php
//php中用数组表示JSON格式数据
$arr = array(
'firstname' => iconv('gb2312', 'utf-8', '非诚'),
'lastname' => iconv('gb2312', 'utf-8', '勿扰'),
'contact' => array(
'email' =>'fcwr@111cn.net',
'website' =>'http://www.111cn.net',
)
);
//将数组编码成JSON数据格式
$json_string = json_encode($arr);
//将JSON格式数据进行解码,解码后不是JSON数据格式,不可用echo直接输出
$obj = json_decode($json_string);
//强制转化为数组格式
$arr = (array) $obj;
//按数组方式调用里面的数据
echo iconv('utf-8','gb2312',$arr['firstname']);
echo '</br>';
//输出数组结构
print_r($arr);
?>

好了实例就讲到了这里了关于
json_decode()参考 http://www.111cn.net/phper/18/32827.htm
json_encode()参考 http://www.111cn.net/phper/18/32827.htm

本文章介绍一篇较实用的文章关于php做站内搜索并高亮显示关键字,这个很多朋友直接利用preg_replace来操作,这是正确的哦,不过我觉得用str_replace更快一些哦。至于原因自己查查这两个函数的区别吧。

如何使用php做站内搜索并高亮显示关键字?

 代码如下 复制代码

<?php

       require_once 'sqlTools.class.php';//封装类,可执行dql、dml语句

       $info=$_POST['info'];

       $sql="select name,password,email from user_500 where name like '%$info%' or password like '%$info%' or email like '%$info%'";

       $sqlTools=new  SqlTools();

       $res=$sqlTools->execute_dql($sql);

       while ($row=mysql_fetch_assoc($res)){

              $row['name']=preg_replace("/($info)/i","<b style="color:red">\1</b>",$row['name']);

              $row['password']=preg_replace("/($info)/i","<b style="color:red">\1</b>",$row['password']);

              $row['email']=preg_replace("/($info)/i","<b style="color:red">\1</b>",$row['email']);

              echo $row['name']."-->".$row['password']."-->".$row['email']."<br>";

       }   

?>

思路分析:

将sql语句中包含的%$info%交给DBMS执行的时候,他会查找字段中含有变量$info的值的信息,

%$info--->查找以$info的值结束的信息

$info%--->查找以$info的值开头的信息

 

通过正则函数preg_replace()将搜索到的关键字高亮显示,比如,

 

$row['name']=preg_replace("/($info)/i","<b style="color:red">\1</b>",$row['name']);

的意思是:通过POST方接收到的值$info替换为加上样式(红色加粗)的结果,并将结果重新赋给$row[‘name’]

如果要搜索多个关键字的话,可以对接收到值$info进行分割,比如$info_more=explode(" ",$info);//这种方式能对以空格隔开的关键字进行分割,再对分割后的结果挨个进行查询,同样,可以使用正则表达式函数进行替换工作,以高亮显示关键字

 代码如下 复制代码

sqlTools.class.php的源代码:

<?php

       class SqlTools{

              private $host="localhost";

              private $dbname="test";

              private $dbuser="root";

              private $dbpwd="";

              private $conn;

              public function __construct(){

                     $this->conn=mysql_connect($this->host,$this->dbuser,$this->dbpwd);

                     if(!$this->conn){

                            die("连接数据库失败".mysql_error());

                     }

                     mysql_select_db($this->dbname,$this->conn) or die("找不到该数据库".mysql_error());

                     mysql_query("set names utf8");

              }

              public function execute_dml($sql){

                     $bool=mysql_query($sql);

                     if ($bool){

                            if ($bool>0) {

                                   return 1;

                            }else{

                                   return 2;

                            }

                     }else {

                            return 0;

                     }

              }

              public function execute_dql($sql){

                     $res=mysql_query($sql);

                     return $res;

              }

              public function close_conn(){

                     mysql_close($this->conn);

              }

       }

?>

PHP脚本执行时间限制,默认的是30m 解决办法:set_time_limit();或者修改PHP.ini 设置max_execution_time时间(不推荐)

使用php让浏览器刷新需要解决几个问题
如果客户端浏览器关闭,程序可能就被迫终止,解决办法:ignore_user_abort即使关闭页面依然正常执行
如果程序一直执行很有可能会消耗大量的资源,解决办法使用sleep使用程序休眠一会,然后在执行
PHP定时执行的代码:

 代码如下 复制代码

<?php
ignore_user_abort();//关掉浏览器,PHP脚本也可以继续执行.
set_time_limit(3000);// 通过set_time_limit(0)可以让程序无限制的执行下去
$interval=5;// 每隔5s运行

//方法1--死循环
do{
 echo '测试'.time().'<br/>'; 
 sleep($interval);// 等待5s 
}while(true);

//方法2---sleep 定时执行
 require_once './curlClass.php';//引入文件
 
 $curl = new httpCurl();//实例化
 $stime = $curl->getmicrotime();
 for($i=0;$i<=10;$i++){
  
  echo '测试'.time().'<br/>'; 
  sleep($interval);// 等待5s
  
 }
 ob_flush();
 flush();
 $etime = $curl->getmicrotime();
 echo '<hr>';
 echo round(($etime-stime),4);//程序执行时间

本文章就介绍二个函数一个是验证IP地址,另一个是获取用户的真实IP地址的函数,也是常用的两个IP操作函数,有需要的同学可以参考一下。

获取用户真实IP地址

 代码如下 复制代码

function get_client_ip( )
{
        if ( getenv( "REMOTE_ADDR" ) && strcasecmp( getenv( "REMOTE_ADDR" ), "unknown" ) )
        {
                $onlineip = getenv( "REMOTE_ADDR" );
                return $onlineip;
        }
        if ( isset( $_SERVER['REMOTE_ADDR'] ) && $_SERVER['REMOTE_ADDR'] && strcasecmp( $_SERVER['REMOTE_ADDR'], "unknown" ) )
        {
                $onlineip = $_SERVER['REMOTE_ADDR'];
                return $onlineip;
        }
        if ( getenv( "HTTP_CLIENT_IP" ) && strcasecmp( getenv( "HTTP_CLIENT_IP" ), "unknown" ) )
        {
                $onlineip = getenv( "HTTP_CLIENT_IP" );
                return $onlineip;
        }
        if ( getenv( "HTTP_X_FORWARDED_FOR" ) && strcasecmp( getenv( "HTTP_X_FORWARDED_FOR" ), "unknown" ) )
        {
                $onlineip = getenv( "HTTP_X_FORWARDED_FOR" );
        }
        return $onlineip;
}

判断是否为IP地址

 代码如下 复制代码


function is_ip( $IP )
{
        $IP_ARRAY = explode( ".", $IP );
        $IP_ARRAY_NUM = sizeof( $IP_ARRAY );
        if ( $IP_ARRAY_NUM != 4 )
        {
                return FALSE;
        }
        $I = 0;
        for ( ;    $I < $IP_ARRAY_NUM;    ++$I    )
        {
                if ( !is_numeric( $IP_ARRAY[$I] ) && $IP_ARRAY[$I] < 0 || 255 < $IP_ARRAY[$I] )
                {
                        return FALSE;
                }
                if ( !( $I == 3 ) && !( $IP_ARRAY[$I] == 255 ) )
                {
                        continue;
                }
                return FALSE;
        }
        return TRUE;
}

文章介绍了三种常用的日期时间比较格式的函数,一个是对整日期,一个是只对时间比较,最后一个是专业比较时间差可以到秒。

日期比较如 2011-11-11  2011-12-12

 代码如下 复制代码
function compare_date( $DATE1, $DATE2 )
{
        $STR = strtok( $DATE1, "-" );
        $YEAR1 = $STR;
        $STR = strtok( "-" );
        $MON1 = $STR;
        $STR = strtok( "-" );
        $DAY1 = $STR;
        $STR = strtok( $DATE2, "-" );
        $YEAR2 = $STR;
        $STR = strtok( "-" );
        $MON2 = $STR;
        $STR = strtok( "-" );
        $DAY2 = $STR;
        if ( $YEAR2 < $YEAR1 )
        {
                return 1;
        }
        if ( $YEAR1 < $YEAR2 )
        {
                return -1;
        }
        if ( $MON2 < $MON1 )
        {
                return 1;
        }
        if ( $MON1 < $MON2 )
        {
                return -1;
        }
        if ( $DAY2 < $DAY1 )
        {
                return 1;
        }
        if ( $DAY1 < $DAY2 )
        {
                return -1;
        }
        return 0;
}

格式:12.00 -13.11

 代码如下 复制代码
function compare_time( $TIME1, $TIME2 )
{
        $STR = strtok( $TIME1, ":" );
        $HOUR1 = $STR;
        $STR = strtok( ":" );
        $MIN1 = $STR;
        $STR = strtok( ":" );
        $SEC1 = $STR;
        $STR = strtok( $TIME2, ":" );
        $HOUR2 = $STR;
        $STR = strtok( ":" );
        $MIN2 = $STR;
        $STR = strtok( ":" );
        $SEC2 = $STR;
        if ( $HOUR2 < $HOUR1 )
        {
                return 1;
        }
        if ( $HOUR1 < $HOUR2 )
        {
                return -1;
        }
        if ( $MIN2 < $MIN1 )
        {
                return 1;
        }
        if ( $MIN1 < $MIN2 )
        {
                return -1;
        }
        if ( $SEC2 < $SEC1 )
        {
                return 1;
        }
        if ( $SEC1 < $SEC2 )
        {
                return -1;
        }
        return 0;
}

格式:2011-11-12 1:6:25   ,2011-12-13 1:2:35

 代码如下 复制代码

function compare_date_time( $DATE_TIME1, $DATE_TIME2 )
{
        if ( $DATE_TIME1 == NULL || strlen( $DATE_TIME1 ) == 0 || $DATE_TIME2 == NULL || strlen( $DATE_TIME2 ) == 0 )
        {
                return -1;
        }
        $DATE_TIME1_ARRY = explode( " ", $DATE_TIME1 );
        $DATE_TIME2_ARRY = explode( " ", $DATE_TIME2 );
        if ( compare_date( $DATE_TIME1_ARRY[0], $DATE_TIME2_ARRY[0] ) == 1 )
        {
                return 1;
        }
        if ( compare_date( $DATE_TIME1_ARRY[0], $DATE_TIME2_ARRY[0] ) == 0 )
        {
                if ( compare_time( $DATE_TIME1_ARRY[1], $DATE_TIME2_ARRY[1] ) == 1 )
                {
                        return 1;
                }
                if ( compare_time( $DATE_TIME1_ARRY[1], $DATE_TIME2_ARRY[1] ) == 0 )
                {
                        return 0;
                }
                return -1;
        }
        return -1;
}

标签:[!--infotagslink--]

您可能感兴趣的文章: