php利用嵌套数组拼接与解析json的方法
利用嵌套数组 拼接混合json -包含对象数组
代码如下 | 复制代码 |
<?php
// 自 PHP 5.4 起 $array= [ "status"=>"0", "message"=>"ok", "arr"=> [] ];
classPerson { public$name; public$age;
//定义一个构造方法初始化赋值 publicfunction__construct($name,$age) { $this->name=$name; $this->age=$age; } }
for($i=0;$i<10;$i++) { $p=newPerson("ren",$i); $array["arr"][]=$p; }
//var_dump($array);
echojson_encode($array);
?> |
php利用嵌套数组 解析混合json 包含对象数组
代码如下 | 复制代码 |
<?php functionjson_to_array($web) { $arr=array(); foreach($webas$k=>$v) { if(is_object($v))$arr[$k]=json_to_array($v);//判断类型是不是object else$arr[$k]=$v; } return$arr; } $s='{"webname":"homehf","url":"www.homehf.com","qq":"744348666"}' //将字符转成JSON $web=json_decode($s); $arr=array(); foreach($webas$k=>$v) $arr[$k]=$v; echo" "; print_r($arr); echo"";
$s='{"webname":"homehf","url":"www.homehf.com","contact":{"qq":"744348666","mail":"nieweihf@163.com","xx":"xxxxxxx"}}' $web=json_decode($s); $arr=json_to_array($web); echo" "; print_r($arr); echo"";
/************************************************************************ ************************************************************************/ $s='{"webname":"homehf","url":"www.homehf.com","contact":{"qq":"744348666","mail":"nieweihf@163.com","xx":"xxxxxxx"}}' $web=json_decode($s); echo'网站名称:'.$web->webname.' echo' /************************************************************************ ************************************************************************/ $s='{"webname":"homehf","url":"www.homehf.com","contact":{"qq":"744348666","mail":"nieweihf@163.com","xx":"xxxxxxx"}}' $web=json_decode($s); echojson_encode($web);
$mys='{"status":"0","message":"ok","arr":[{"name":"ren","age":0},{"name":"ren","age":1},{"name":"ren","age":2}, {"name":"ren","age":3},{"name":"ren","age":4},{"name":"ren","age":5},{"name":"ren","age":6},{"name":"ren","age":7}, {"name":"ren","age":8},{"name":"ren","age":9}]}'
$myweb=json_decode($mys);
echo$myweb->status;
for($i=0;$i<10;$i++) { echo$myweb->arr[$i]->age; echo' } ?> |
代码如下 | 复制代码 |
<?php /**//* * @(#)UploadFile.php * * 可同时处理用户多个上传文件。效验文件有效性后存储至指定目录。 * 可返回上传文件的相关有用信息供其它程序使用。(如文件名、类型、大小、保存路径) * 使用方法请见本类底部(UploadFile类使用注释)信息。 * */ classUploadFile { var$user_post_file=array();//用户上传的文件 var$save_file_path; //存放用户上传文件的路径 var$max_file_size; //文件最大尺寸 var$last_error; //记录最后一次出错信息 //默认允许用户上传的文件类型 var$allow_type=array('gif','jpg','png','zip','rar','txt','doc','pdf'); var$final_file_path;//最终保存的文件名 var$save_info=array();//返回一组有用信息,用于提示用户。 /**//** * 构造函数,用与初始化相关信息,用户待上传文件、存储路径等 * * @param Array $file 用户上传的文件 * @param String $path 存储用户上传文件的路径 * @param Integer $size 允许用户上传文件的大小(字节) * @param Array $type 此数组中存放允计用户上传的文件类型 */ functionUploadFile($file,$path,$size= 2097152,$type='') { $this->user_post_file =$file; $this->save_file_path =$path; $this->max_file_size =$size;//如果用户不填写文件大小,则默认为2M. if($type!='') $this->allow_type =$type; } /**//** * 存储用户上传文件,检验合法性通过后,存储至指定位置。 * @access public * @return int 值为0时上传失败,非0表示上传成功的个数。 */ functionupload() { for($i= 0;$i<count($this->user_post_file['name']);$i++) { //如果当前文件上传功能,则执行下一步。 if($this->user_post_file['error'][$i] == 0) { //取当前文件名、临时文件名、大小、扩展名,后面将用到。 $name=$this->user_post_file['name'][$i]; $tmpname=$this->user_post_file['tmp_name'][$i]; $size=$this->user_post_file['size'][$i]; $mime_type=$this->user_post_file['type'][$i]; $type=$this->getFileExt($this->user_post_file['name'][$i]); //检测当前上传文件大小是否合法。 if(!$this->checkSize($size)) { $this->last_error ="The file size is too big. File name is: ".$name; $this->halt($this->last_error); continue; } //检测当前上传文件扩展名是否合法。 if(!$this->checkType($type)) { $this->last_error ="Unallowable file type: .".$type." File name is: ".$name; $this->halt($this->last_error); continue; } //检测当前上传文件是否非法提交。 if(!is_uploaded_file($tmpname)) { $this->last_error ="Invalid post file method. File name is: ".$name; $this->halt($this->last_error); continue; } //移动文件后,重命名文件用。 $basename=$this->getBaseName($name,".".$type); //移动后的文件名 $saveas=$basename."-".time().".".$type; //组合新文件名再存到指定目录下,格式:存储路径 + 文件名 + 时间 + 扩展名 $this->final_file_path =$this->save_file_path."/".$saveas; if(!move_uploaded_file($tmpname,$this->final_file_path)) { $this->last_error =$this->user_post_file['error'][$i]; $this->halt($this->last_error); continue; } //存储当前文件的有关信息,以便其它程序调用。 $this->save_info[] =array("name"=>$name,"type"=>$type, "mime_type"=>$mime_type, "size"=>$size,"saveas"=>$saveas, "path"=>$this->final_file_path); } } returncount($this->save_info);//返回上传成功的文件数目 } /**//** * 返回一些有用的信息,以便用于其它地方。 * @access public * @return Array 返回最终保存的路径 */ functiongetSaveInfo() { return$this->save_info; } /**//** * 检测用户提交文件大小是否合法 * @param Integer $size 用户上传文件的大小 * @access private * @return boolean 如果为true说明大小合法,反之不合法 */ functioncheckSize($size) { if($size>$this->max_file_size) { returnfalse; } else{ returntrue; } } /**//** * 检测用户提交文件类型是否合法 * @access private * @return boolean 如果为true说明类型合法,反之不合法 */ functioncheckType($extension) { foreach($this->allow_typeas$type) { if(strcasecmp($extension,$type) == 0) returntrue; } returnfalse; } /**//** * 显示出错信息 * @param $msg 要显示的出错信息 * @access private */ functionhalt($msg) { printf("<b><UploadFile Error:></b> %s <br>\n",$msg); } /**//** * 取文件扩展名 * @param String $filename 给定要取扩展名的文件 * @access private * @return String 返回给定文件扩展名 */ functiongetFileExt($filename) { $stuff=pathinfo($filename); return$stuff['extension']; } /**//** * 取给定文件文件名,不包括扩展名。 * eg: getBaseName("j:/hexuzhong.jpg"); //返回 hexuzhong * * @param String $filename 给定要取文件名的文件 * @access private * @return String 返回文件名 */ functiongetBaseName($filename,$type) { $basename=basename($filename,$type); return$basename; } } /**//******************** UploadFile类使用注释 //注意,上传组件name属性不管是一个还是多个都要使用数组形式,如: <input type="file" name="user_upload_file[]"> <input type="file" name="user_upload_file[]"> //如果用户点击了上传按钮。 if ($_POST['action'] == "上传") { //设置允许用户上传的文件类型。 $type = array('gif', 'jpg', 'png', 'zip', 'rar'); //实例化上传类,第一个参数为用户上传的文件组、第二个参数为存储路径、 //第三个参数为文件最大大小。如果不填则默认为2M //第四个参数为充许用户上传的类型数组。如果不填则默认为gif, jpg, png, zip, rar, txt, doc, pdf $upload = new UploadFile($_FILES['user_upload_file'], 'j:/tmp', 100000, $type); //上传用户文件,返回int值,为上传成功的文件个数。 $num = $upload->upload(); if ($num != 0) { echo "上传成功<br>"; //取得文件的有关信息,文件名、类型、大小、路径。用print_r()打印出来。 print_r($upload->getSaveInfo()); //格式为: Array // ( // [0] => Array( // [name] => example.txt // [type] => txt // [size] => 526 // [path] => j:/tmp/example-1108898806.txt // ) // ) echo $num."个文件上传成功"; } else { echo "上传失败<br>"; } } */ ?> |
代码如下 | 复制代码 |
/** * 判断当前访问的用户是 PC端 还是 手机端 返回true 为手机端 false 为PC 端 * @return boolean */ functionisMobile(){ $useragent=isset($_SERVER['HTTP_USER_AGENT']) ?$_SERVER['HTTP_USER_AGENT'] :''; //echo $useragent;die; $useragent_commentsblock=preg_match('|\(.*?\)|',$useragent,$matches)>0?$matches[0]:''; functionCheckSubstrs($substrs,$text){ foreach($substrsas$substr) if(false!==strpos($text,$substr)){ returntrue; } returnfalse; } $mobile_os_list=array('Google Wireless Transcoder','Windows CE','WindowsCE','Symbian','Android','armv6l','armv5','Mobile','CentOS','mowser','AvantGo','Opera Mobi','J2ME/MIDP','Smartphone','Go.Web','Palm','iPAQ'); $mobile_token_list=array('Profile/MIDP','Configuration/CLDC-','160×160','176×220','240×240','240×320','320×240','UP.Browser','UP.Link','SymbianOS','PalmOS','PocketPC','SonyEricsson','Nokia','BlackBerry','Vodafone','BenQ','Novarra-Vision','Iris','NetFront','HTC_','Xda_','SAMSUNG-SGH','Wapaka','DoCoMo','iPhone','iPod');
$found_mobile=CheckSubstrs($mobile_os_list,$useragent_commentsblock) || CheckSubstrs($mobile_token_list,$useragent);
if($found_mobile){ returntrue; }else{ returnfalse; } } |
代码如下 | 复制代码 |
classSegmentation { var$options=array('lowercase'=> TRUE, 'segment_english'=> FALSE); var$dict_name='Unknown' var$dict_words=array(); functionsetLowercase($value) { if($value) { $this->options['lowercase'] = TRUE; }else{ $this->options['lowercase'] = FALSE; } returnTRUE; } functionsetSegmentEnglish($value) { if($value) { $this->options['segment_english'] = TRUE; }else{ $this->options['segment_english'] = FALSE; } returnTRUE; } functionload($dict_file) { if(!file_exists($dict_file)) { returnFALSE; } $fp=fopen($dict_file,'r'); $temp=fgets($fp, 1024); if($temp=== FALSE) { returnFALSE; }else{ if(strpos($temp,"\t") !== FALSE) { list ($dict_type,$dict_name) =explode("\t", trim($temp)); }else{ $dict_type= trim($temp); $dict_name='Unknown' } $this->dict_name =$dict_name; if($dict_type!=='DICT_WORD_W') { returnFALSE; } } while(!feof($fp)) { $this->dict_words[rtrim(fgets($fp, 32))] = 1; } fclose($fp); returnTRUE; } functiongetDictName() { return$this->dict_name; } functionsegmentString($str) { if(count($this->dict_words) === 0) { returnFALSE; } $lines=explode("\n",$str); return$this->_segmentLines($lines); } functionsegmentFile($filename) { if(count($this->dict_words) === 0) { returnFALSE; } $lines= file($filename); return$this->_segmentLines($lines); } function_segmentLines($lines) { $contents_segmented='' foreach($linesas$line) { $contents_segmented.=$this->_segmentLine(rtrim($line)) ." \n"; } do{ $contents_segmented=str_replace(' ',' ',$contents_segmented); } while(strpos($contents_segmented,' ') !== FALSE); return$contents_segmented; } function_segmentLine($str) { $str_final='' $str_array=array(); $str_length=strlen($str); if($str_length> 0) { if(ord($str{$str_length-1}) >= 129) { $str.=' ' } } for($i=0;$i<$str_length;$i++) { if(ord($str{$i}) >= 129) { $str_array[] =$str{$i} .$str{$i+1}; $i++; }else{ $str_tmp=$str{$i}; for($j=$i+1;$j<$str_length;$j++) { if(ord($str{$j}) < 129) { $str_tmp.=$str{$j}; }else{ break; } } $str_array[] =array($str_tmp); $i=$j- 1; } } $pos=count($str_array); while($pos> 0) { $char=$str_array[$pos-1]; if(is_array($char)) { $str_final_tmp=$char[0]; if($this->options['segment_english']) { $str_final_tmp= preg_replace("/([\!\"\#\$\%\&\'\(\)\*\+\,\-\.\/\:\;\<\=\>\?\@\[\\\\\]\^\_\`\{\|\}\~\t\f]+)/"," $1 ",$str_final_tmp); $str_final_tmp= preg_replace("/([\!\"\#\$\%\&\'\(\)\*\+\,\-\.\/\:\;\<\=\>\?\@\[\\\\\]\^\_\`\{\|\}\~\t\f])([\!\"\#\$\%\&\'\(\)\*\+\,\-\.\/\:\;\<\=\>\?\@\[\\\\\]\^\_\`\{\|\}\~\t\f])/"," $1 $2 ",$str_final_tmp); } if($this->options['lowercase']) { $str_final_tmp=strtolower($str_final_tmp); } $str_final=" $str_final_tmp$str_final"; $pos--; }else{ $word_found= 0; $word_array=array(0 =>''); if($pos< 4) { $word_temp=$pos+ 1; }else{ $word_temp= 5; } for($i=1;$i<$word_temp;$i++) { $word_array[$i] =$str_array[$pos-$i] .$word_array[$i-1]; } for($i=($word_temp-1);$i>1;$i--) { if(array_key_exists($word_array[$i],$this->dict_words)) { $word_found=$i; break; } } if($word_found) { $str_final=" $word_array[$word_found]$str_final"; $pos=$pos-$word_found; }else{ $str_final=" $char$str_final"; $pos--; } } } return$str_final; } } ?> |
相关文章
- 这篇文章主要介绍了Spring AOP 对象内部方法间的嵌套调用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-08-29
- 这篇文章主要介绍了使用list stream:任意对象List拼接字符串操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-09
- 这篇文章主要介绍了@Cacheable 拼接key的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-13
- 这篇文章主要给大家介绍了关于vue.js Router中嵌套路由的相关资料,所谓嵌套路由就是路由里面嵌套他的子路由,文章通过示例代码介绍的非常详细,需要的朋友可以参考下...2021-06-27
python使用for...else跳出双层嵌套循环的方法实例
这篇文章主要给大家介绍了关于python使用for...else跳出双层嵌套循环的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用python具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-05-18- 这篇文章主要介绍了在vue中实现嵌套页面(iframe),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-31
- 这篇文章主要介绍了Java优化for循环嵌套的高效率方法,帮助大家更好的提升java程序性能,感兴趣的朋友可以了解下...2020-09-14
- 这篇文章主要介绍了Antd的Table组件嵌套Table以及选择框联动操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-10-25
- vue通过provide & inject两个关键字完成父组件向子孙组件直接传值,很像子类能够使用父类的属性一样方便。provide & inject一般用于多层之间的传值,两层之间还是使用props进行...2021-10-10
- 本篇文章主要介绍了jquery拼接ajax 的json和字符串拼接的方法,这里整理了详细的代码,有需要的小伙伴可以参考下。 ...2017-03-13
- 这篇文章主要介绍了Window.Open打开窗体和if嵌套代码的相关资料,需要的朋友可以参考下...2016-04-18
- php怎么利用嵌套数组拼接与解析json?本文介绍了php利用嵌套数组拼接与解析json的方法,非常实用,有兴趣的同学快来看看吧 利用嵌套数组 拼接混合json -包含对象数组...2017-07-06
- json数据格式解析我自己分为两种,一种是普通的,一种是带有数组形式的,下面积们分别举说明一下关于android手机开发中处理方法。 普通形式的: 服务器端返回的json数...2016-09-20
Java8优雅的字符串拼接工具类StringJoiner实例代码
这篇文章主要给大家介绍了关于Java8优雅的字符串拼接工具类StringJoiner的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-28- 本文主要介绍了C#拼接Json串的几种方法,主要包括了4种方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-06-01
- 本教程我们讲解一下用原生的Android开发生成JSON与解析JSON数据格式,掌握Android原生解析JSON数据的方法相当重要,这样我们就可以比较好理解那些jar包的原理。 下面...2016-09-20
- 这篇文章主要介绍了C语言中字符串拼接(堆与栈)的相关资料,文中通过一段示例代码详细介绍了关于C语言中的字符串拼接问题,有需要的朋友可以参考借鉴,下面来一起看看吧。...2020-04-25
- gridview和checkboxlist的嵌套使用,会有效的提高开发的效率,不过很多的童鞋们对此还是很陌生的,接下来将帮助童鞋们实现gridview和checkboxlist的嵌套使用,感兴趣的朋友可以了解下,或许对你有所帮助...2021-09-22
- 很多人都会是用PS进行拼接,本文主要介绍了pytho多张图片的无损拼接的实现示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-07-27
- 本文主要介绍了vue router-view嵌套显示,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-07-31